Сравните количества вхождений каждого символа в обеих строках. Одинаковая длина обязательна; порядок символов не важен, но их кратность должна совпасть.
Функция определения анаграмм
Сравните количества вхождений каждого символа в обеих строках. Одинаковая длина обязательна; порядок символов не важен, но их кратность должна совпасть.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию, принимающую две строки. Если первая строка является анаграммой второй, функция должна вернуть True, в противном случае – False. Пример сигнатуры: def is_anagram(first: str, second: str) -> bool:
Ответ
Сравните количества вхождений каждого символа в обеих строках. Одинаковая длина обязательна; порядок символов не важен, но их кратность должна совпасть.
Вариант без сортировки:
def is_anagram(first: str, second: str) -> bool:
if len(first) != len(second):
return False
counts = {}
for char in first:
counts[char] = counts.get(char, 0) + 1
for char in second:
if counts.get(char, 0) == 0:
return False
counts[char] -= 1
return True
Время ожидаемо O(n), память O(k). Регистр, пробелы и Unicode-нормализация здесь значимы. Если нужно игнорировать их, это отдельное правило подготовки входа, не свойство анаграммы само по себе.