プレフィックス関数を最適化した後 (詳細については こちら )、O(n) 漸近の最終アルゴリズムが得られます。
ベクトル<int> prefix_function (文字列 s) { int n = (int ) s.length(); ベクトル<int>pi(n); の (int i=1; i<n; ++i) { int j = pi[i-1< /スパン>]; その間 (j > 0 && s[i] != s[j]) j = pi[j-1]; if (s[i] == s[j]) ++スパン>j; pi[i] = j; } 円周率を返します。 } プレ>
N
1
i
1000 ms 256 Mb Rules for program design and list of errors in automatic problem checking