Как найти частоту анаграммы в строке? - PullRequest
0 голосов
/ 03 октября 2011

Учитывая строковое значение произвольной длины, вы должны определить частоту слов, которые являются анаграммами друг друга.

public static Map<String, Integer> generateAnagramFrequency(String str)
{ ... }

Например: если строка "найти искусство у крысы"для тележки и днк-трека "ваш вывод должен быть картой: найти -> 1 арт -> 2 в -> 1 а -> 1 корзина -> 2 и -> 2

Ключи должны быть первымислова, а число - это число анаграмм этого слова, включая его самого.

Решение, которое я придумал, заключается в том, чтобы отсортировать все слова и сравнить каждый символ от обеих строк до концалибо строки.Это будет O (logn).Я ищу другой эффективный метод, который не меняет 2 сравниваемые строки.Благодарю.

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Создайте «подпись» для каждого слова, отсортировав буквы по алфавиту.Сортируйте слова по их подписи.Пробежаться по отсортированному списку по порядку;если подпись совпадает с предыдущей подписью, у вас есть анаграмма.

1 голос
/ 03 октября 2011

Я написал реализацию JavaScript для создания n-граммы (анализ слова) на Извлечение ключевых фраз из текста (1-4 слова нграмм) .

Эта функция может быть легко изменена для анализа частоты анаграмм:
Замените s = text[i]; на s = text[i].sort(), чтобы порядок символов больше не имел значения.

...