Здравствуйте, Vladimir, Вы писали:
V>Префиксное дерево не подходит, т.к. подразумевается соответствие подстроки с начала строки. По тем же причинам не подходит и суффиксное дерево. Нужен алгоритм что бы предварительно отбрасывать несовпадающие строки.
Почему не подходит? Попробуй посмотреть вот например, описано как сделать full-text-search с помощью trie (префиксного дерева).
Вроде задача похожа на твою 1-в-1 (поиск статей по содержащемуся в их заголовке слову)
https://www.toptal.com/algorithms/needle-in-a-haystack-a-nifty-large-scale-text-search-algorithm
То есть, то того что дерево "префиксное", вовсе не означает что оно может использоваться только для поиска с начала строки.
Это просто название структуры данных такое.