部分文字列のコレクションがあります
"this" "is" "a" "antelope"
与えられた文字列を見て、「この文字列に与えられた部分文字列はありますか」という質問に答える必要があります。
だから私の入力文字列は
"issue"
「is」は「issue」のサブストリングであるため、どちらが一致します
これを初めて試したところ、部分文字列のコレクションを誤ってトライに変えました。「入力文字列は与えられたコレクションの部分文字列である」と逆に答えたので、それは私をどこにも速くさせませんでした。
この質問に効率的に答えるためにコレクションを変換できるアルゴリズムまたはデータ構造はありますか?つまり、単純なブルートフォースの「すべての部分文字列に対して入力をチェックする」メソッドを実行できましたが、もっと良い方法があるようです。
私の与えられた例では、「a」がカモシカがするすべてのケースをカバーするので、「カモシカ」が決してチェックされないことを期待します。「is」は「this」を削除することを期待しているかもしれません。したがって、長い部分文字列を短い文字列で削除すると、パフォーマンスが向上するようです。
私はとりとめています...私が調べなければならないことはありますか?
標準の部分文字列検索アルゴリズム(Boyer-Mooreなど)を調べましたか?一致に到達するまで、コレクション内の各部分文字列を続けて検索できます。
—
James Evans
@ dirk5959単一文字列マッチングアルゴリズムを順番に使用すると、非常に非効率になります。たとえば、検索する文字列に "a"が含まれていない場合、確かに "banana"は含まれていませんが、とにかくそれを探します。
—
David Richerby、2015年
ヒント:サフィックスツリー。
—
ラファエル