Поместите слова в дерево, например, trie или radix , поместив счетчик «количество вхождений» для каждого полного слова, чтобы вы знали, какие узлы являются окончаниями и как часто ониare.
Найти комбинации префикса / постфикса с помощью итерации.
Обе эти операции O (n * k), где k - длина самого длинного слова;это такая же сложность , что и у хеш-таблицы.
HAT-trie - это версия с поддержкой кэша, обещающая высокую производительность.