Как только вы найдете каждую подпоследовательность, вставьте их в ленивую версию trie .
Три страдает от потери памяти. Таким образом, вместо того, чтобы хранить значения до конца, разветвляйтесь только тогда, когда необходимо разрешить конфликты.
Например. Анна, приложения, Анна
Первоначально корневой узел будет содержать анну.
Когда вы пытаетесь вставить приложения, вы понимаете, что в корне уже есть строка, и, следовательно, создаете ветку в и пытаетесь поместить anna и приложения. Конфликт сохраняется до тех пор, пока вы не разделитесь на и na и ap ps.
В настоящее время дерево будет выглядеть так:
a
(anna) n p (apps)
Теперь, когда вы вставите anne, вы достигнете an и поймете, что существует конфликт, и разрешите его, добавив ветвь n , за которой следуют a и е ветви.
Финальная строка будет выглядеть так:
a
n p (apps)
n
(anna) a e (anne)