Алгоритм поиска наиболее распространенных подстрок в строке
Есть ли какой-нибудь алгоритм, который можно использовать для поиска наиболее распространенных фраз (или подстрок) в строке? Например, следующая строка будет иметь «привет мир» в качестве наиболее распространенной фразы из двух слов:
"hello world this is hello world. hello world repeats three times in this string!"
В приведенной выше строке наиболее распространенной строкой (после символа пустой строки, который повторяется бесконечное число раз) будет символ пробела.
Есть ли способ генерировать список общих подстрок в этой строке, от наиболее распространенных до наименее распространенных?