Если вы хотите найти слово в наборе слов, предпочтительной является структура данных. Три - это дерево, такое, что каждый узел передает букву и указывает на все следующие буквы в словаре.
Например, если набор 'cat'
, 'carrot'
, 'clock'
, корень дерева будет указывать на узел 'c'
. Тогда 'c'
будет указывать на 'a'
и 'l'
, а 'a'
- 't'
и 'r'
. Структура Trie может продолжаться до конца слов, или вы можете хранить отдельные суффиксы отдельно.
Теперь, если вы будете искать слово 'card'
, вы пройдете по узлам 'c' > 'a' > 'r'
и увидите, что нет 'd'
, и придете к выводу, что слово отсутствует.
https://en.wikipedia.org/wiki/Trie
Вы можете адаптировать идею к вашему случаю, заменив «слово» на «предложение» и «букву» на «слово». Поскольку набор слов больше, чем алфавит, вам придется использовать хеш-карты в каждом узле, чтобы связать возможные слова с указателями на следующие узлы.
Чтобы решить вашу начальную проблему, возьмите каждое слово по очереди, сравните его и сопоставьте его и его наследников с трийским. Я полагаю, что общее время выполнения будет порядка числа слов в тексте, умноженного на среднюю длину совпадений, и времени, которое требуется для выполнения поиска по хеш-карте.
Для простоты разработки сначала рассмотрите возможность поиска слов в стандартном дереве.