Задачи на мапы
1) Написать метод, на вход которого приходит список слов, на выходе нужно вернуть список слов с подсписками, где каждый подсписок содержит слова - анаграммы (одинаковые слова с учетом перестановки символов).
Давайте напишем метод на Go, который принимает список слов и возвращает список подсписков, где каждый подсписок содержит слова-анаграммы.
Пояснение решения
Сортировка символов:
Для каждого слова мы будем сортировать его символы. Это позволит нам легко сравнивать слова и определять, являются ли они анаграммами.
Например, для слова "listen" отсортированные символы будут "eilnst", и для слова "silent" отсортированные символы также будут "eilnst".
Использование карты (map):
Мы будем использовать карту (map), где ключом будет отсортированное слово, а значением — список слов, которые являются анаграммами этого ключа.
Например, для ключа "eilnst" значением будет список ["listen", "silent"].
Формирование результата:
После того как мы заполним карту, мы преобразуем ее значения в список подсписков.
Код
Объяснение кода
Функция
sortString
:Принимает строку, преобразует ее в срез рун (
[]rune
), сортирует руны и возвращает отсортированную строку.Это позволяет нам получить каноническую форму слова, которую можно использовать в качестве ключа в карте.
Функция
groupAnagrams
:Принимает список слов и создает карту
anagramMap
, где ключом является отсортированное слово, а значением — список слов, которые являются анаграммами этого ключа.Для каждого слова в списке:
Сортирует символы слова.
Добавляет слово в соответствующий список в карте.
После заполнения карты преобразует значения карты в список подсписков и возвращает его.
Функция
main
:Пример использования функции
groupAnagrams
.Выводит группы анаграмм на экран.
Заключение
Этот метод эффективно группирует слова-анаграммы, используя сортировку символов и карту для хранения и поиска групп анаграмм. Это решение масштабируется и работает быстро даже для больших списков слов.
Last updated