Algorytm do znajdowania najczęstszych podciągów w ciągu

Czy jest jakiś algorytm, który można wykorzystać do znalezienia najpowszechniejszych fraz (lub podciągów) w ciągu? Na przykład następujący ciąg oznaczałby „hello world” jako najpowszechniejszą frazę dwuliterową:

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

W powyższym ciągu najbardziej popularnym ciągiem znaków (po pustym znaku ciągu, który powtarza nieskończoną liczbę razy) byłby znak spacji.

Czy istnieje sposób na wygenerowanie listy wspólnych podciągów w tym łańcuchu, od najczęstszych do najmniej popularnych?

questionAnswers(5)

yourAnswerToTheQuestion