Сравнивая n строк в Java - PullRequest
0 голосов
/ 12 марта 2012

Кто-нибудь знает самый быстрый способ сравнения одной строки с n числом строк для совпадения?

Например: слово «пример» необходимо сравнить со списком, содержащим n количество слов для совпадения.Список может содержать любое количество слов любой длины.

Есть ли конкретный алгоритм, который я могу использовать для этого?Я знаю об алгоритмах сопоставления строк, которые находят подстроку в строке, таких как алгоритм Бойера-Мура.Но не для этого.Пожалуйста, помогите мне здесь.Обратите внимание, что я буду реализовывать это на Java.

Ответы [ 4 ]

3 голосов
/ 12 марта 2012

Вы можете использовать метод contains.

List<String> lstr = Arrays.asList(new String[]{"a", "b", "c", "d", "e"});
Collections.sort(lstr); 

lstr.contains("c"); // true
lstr.contains("f"); // false
2 голосов
/ 12 марта 2012

Запустите цикл до конца списка и сравните каждый элемент, используя equals () метод

0 голосов
/ 12 марта 2012

Предполагая, что вы просто хотите проверить точное совпадение, вы можете либо сохранить хэш-карту своего словаря и посмотреть хэш слова, либо использовать дерево типа http://en.wikipedia.org/wiki/Trie, где каждый узел являетсябуква.

И то, и другое будет иметь почти постоянную сложность по времени по сравнению с количеством слов, а вместо этого будет зависеть от длины слова, которое вы ищете (незначительно).

0 голосов
/ 12 марта 2012

Вы можете подготовить Map<Int,List<String>> для своего списка, где ключом является .hashcode() для строки, а список содержит все строки с одинаковым хеш-кодом.

Затем вы просто ищете хеш-код для новой строки и запускаете equals () для каждой строки в возвращаемом списке.

Должно быть намного быстрее, так как для сравнения гораздо меньше записей. Обратите внимание, что подготовка требует некоторого времени, поэтому делайте это только в том случае, если вам нужно сделать это более одного раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...