Слова являются анаграммами, если имеют одинаковый набор букв с одинаковыми частотами. Группируем строки по отсортированному представлению символов.
input: list[str] = ["abba", "bbaa", "hello", "leohl", "llm"]
Слова являются анаграммами, если имеют одинаковый набор букв с одинаковыми частотами. Группируем строки по отсортированному представлению символов.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
input: list[str] = ["abba", "bbaa", "hello", "leohl", "llm"]
output: list[list[str]] = [["abba", "bbaa"], ["hello", "leohl"], ["llm"]]
Ответ
Слова являются анаграммами, если имеют одинаковый набор букв с одинаковыми частотами. Группируем строки по отсортированному представлению символов.
def group_anagrams(words: list[str]) -> list[list[str]]:
groups = {}
for word in words:
key = ''.join(sorted(word))
groups.setdefault(key, []).append(word)
return list(groups.values())
Для исходного примера получатся группы abba/bbaa, hello/leohl и llm. Сложность — O(суммы L log L), где L — длина очередного слова. Регистр и пробелы здесь значимы; приводить их к единому виду нужно только по требованию задачи.