Два слова - это анаграммы, если один из них имеет точно такие же символы, что и у другого слова.
Пример: Anagram
и Nagaram
являются анаграммами (без учета регистра).
Теперь есть много вопросов, подобных этому. Несколько подходов, чтобы определить, являются ли две строки анаграммами:
1) Sort
строки и сравнить их.
2) Создайте frequency map
для этих строк и проверьте, являются ли они одинаковыми или нет.
Но в этом случае мы даем слово (для простоты примем только одно слово и будем иметь только однократные анаграммы), и нам нужно найти анаграммы для этого.
Решение, которое я имею в виду, состоит в том, что мы можем сгенерировать все перестановки для слова и проверить, какие из этих слов существуют в словаре. Но ясно, что это очень неэффективно. Да, словарь также доступен.
Итак, какие альтернативы мы имеем здесь?
Я также читал в подобном потоке, что что-то можно сделать с помощью Tries
, но человек не объяснил, что такое алгоритм, и почему мы использовали Trie на первом месте, просто была предоставлена реализация, которая тоже в Python или Ruby. Так что это было не очень полезно, поэтому я создал этот новый поток. Если кто-то хочет поделиться своей реализацией (кроме C, С++ или Java), то любезно объясните это.