Два слова называются анаграммами, если они имеют точно одинаковые буквы, точно такое же число раз.
Проверка на анаграмму заключается в сортировке букв обоих слов и проверке на равенство:
sort_letters(word1) == sort_letters(word2)
Теперь, чтобы найти все анаграммы данного словарного слова, скажем word1
, я бы нашел все слова в словаре, для которых выполняется вышеуказанный тест. Для оптимизации поиска мы можем просто искать слова, которые имеют одинаковой длины .
Если нам придется делать это многократно, лучше выполнить некоторую предварительную обработку . Мы можем построить что-то вроде HashMap
, где мы могли бы сопоставить string
с набором strings
, которые являются анаграммами. Что-то вроде:
Bad ==> Dab
Cat ==> Act, Tac
.....
Теперь, учитывая любое слово, я могу заглянуть в hashMap
, чтобы получить все его анаграммы.