Algoritmo para encontrar as substrings mais comuns em uma string

Existe algum algoritmo que pode ser usado para encontrar as frases mais comuns (ou substrings) em uma string? Por exemplo, a seguinte string teria "olá mundo" como sua frase mais comum de duas palavras:

"hello world this is hello world. hello world repeats three times in this string!"

Na seqüência acima, a seqüência mais comum (após o caractere de seqüência vazia, que se repete um número infinito de vezes) seria o caractere de espaço.

Existe alguma maneira de gerar uma lista de substrings comuns nesta string, do mais comum ao menos comum?

questionAnswers(5)

yourAnswerToTheQuestion