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]です。