次の問題があるとします。
意味 :
S をアルファベット Σ 上の文字列とします。
S'
の最小周期は、次のS
ようS'
な最小の文字列です。
S = (S')^k (S'')
、の
S''
接頭辞ですS
。そのようなものS'
が存在しない場合S
は、定期的ではありません。例:
S = abcabcabcabca
. Thenabcabc
は からのS = abcabc abcabc a
期間ですが、最小の期間はabc
からS = abc abc abc abc a
です。入力文字列の最小周期を見つけるアルゴリズムを与える
S
か、周期的でないと宣言しS
ます。ヒント:あなたはそれを行うことができます
O(n)
...
私の解決策: O(n) で実行される KMP を使用します。
問題の定義 S = (S')^k (S'') により、最短期間 のオートマトンを作成し、その最短期間 を見つける方法を見つければ、完了だと思います。 .
問題はオートマタのFAILの矢をどこに置くか…
どんなアイデアでも大歓迎です、
よろしく