Для точного соответствия обычно способ реализовать что-то вроде этого состоит в том, чтобы сохранить ваш корпус в trie . Идея состоит в том, что вы сохраняете каждую букву как узел в дереве, связывая следующую букву в слове. Найти совпадения - это просто пройтись по дереву и показать всем детям вашего текущего местоположения. например. «кошка», «корова» и «машина» будут храниться как:
a--t
/ \
c r
\
o--w
Когда вы получаете c, вы начинаете с узла c, a затем доставит вас к узлу c / a (потомки
"t" и "r", делая кота и машину вашим дополнением).
Обратите внимание, что вам также нужно пометить узлы, которые являются полными словами, для обработки имен, которые являются подстроками других (например, "car" и "cart")
Чтобы получить желаемое нечеткое соответствие, вам, возможно, потребуется внести некоторые изменения.