クヌース-モリス-プラット法(Knuth-Morris-Pratt algorithm)は、文字列検索アルゴリズムの一種です。文字列Sから単語Wを探すにあたり、不一致となった位置と単語自身の情報から次に照合を試すべき位置を決定することで検索を効率化するアルゴリズムです。

KMP法では事前に部分マッチテーブルを作成します。このテーブルの目的は S 内の各文字を複数回照合することを防ぐことです。線形検索の性質として、パターンの先頭とマッチする文字列に遭遇したとき、次の照合を開始すべき位置を与えることで複数回照合を防ぐことができるのです。

無駄が多くないか? これを解決するのがKMP法!

String.IndexOfメソッドは時間がかかる

これは普通の文字列target内に文字列patternがあるかどうかを調べるコードです。

結果はこのザマです。

テストケースではどんな文字列が渡されているのかというと・・・

なんだこりゃあ~~~~

ではどうすればよいのでしょうか?

クヌース-モリス-プラット法(KMP法) で時間短縮

ということで以下のようなコードになります。

JavaScriptでも実装してみる

みんなで動作確認できるようにJavaScriptでも実装してみます。

index.js