KMP
およびZ
アルゴリズムは、文字列検索のよく知られたアルゴリズムです。
KMP
アルゴリズムは、次のように定義されている KMP 失敗関数を介してパターンを見つけることを扱います (pat
検索パターン)
lps[i] = pat[0..i] のサフィックスでもある pat[0..i] の最長の適切なプレフィックス。
たとえば、string "abcab"
それは[0, 0, 0, 1, 2]
ここで、Z
アルゴリズムは次のように定義される z 関数を使用します。
長さ n の文字列 S を指定すると、Z アルゴリズムは配列 Z を生成します。ここで、Z[i] は、pat のプレフィックスでもある pat[i] から始まる最長の部分文字列の長さです。
問題は、アルゴリズムZ
を使用して機能を実現できるかどうかです。KMP
私が探しているのは、lps
配列と同じ結果につながる配列のいくつかの変更Z[i]
です。