文字列内で最も長く繰り返されるパターンを見つける


9

文字列で最も長く繰り返されるパターンを見つけるための効率的なアルゴリズムを探しています。

たとえば、次の数字の文字列を考えてみます。

5431428571428571428571428571427623874534

ご覧のとおり、142857142857はこの文字列で数回(少なくとも2回)繰り返される最も長いパターンです。

繰り返される文字列には、総当たりではなく、どんなアイデアも含めるべきではありませんか?


3
「数回」が何を意味するかを定義しませんでしたが、「2回」が「数回」としてカウントされる場合142857、は長いため、最長ではありませ142857142857ん。質問を編集して、「繰り返しパターン」の意味を明確にする必要があると思います。
伊藤剛

非常に良い点です。質問を更新します。

8
パターンの出現を互いにばらばらにする必要がありますか?そうでない場合、142857142857はまだ最長の繰り返しではありません。142857142857142857142が2回発生します。いずれにせよ、このような質問に対する通常の答えは「接尾辞木」です。

回答:


15

pOpO2O2

OOwkバツk2バツwwk/22O


[1] Kolpakov、R.&Kucherov、G.(1999)。線形時間で単語の最大繰り返しを見つける。でコンピュータサイエンスの基礎、1999年第40回年次シンポジウム(頁596から604)。IEEE。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.