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 — длина очередного слова. Регистр и пробелы здесь значимы; приводить их к единому виду нужно только по требованию задачи.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее