アルゴリズムの古典をKMP、文字列マッチングの問題に適用されます。
与えられた二つの文字列:マッチ=「ACBC」STR =は 「BC」は2返さ
=「BCC」STR =「ACBC」試合を-1
私はあなたがアルゴリズム自体の知識を持っているしたい場合にのみ、簡単に、溶液プロセスを記述限られ、ニーズそしてその後、次のアレイの最大一致長を計算するためにそのような接頭辞と接尾辞などの関連情報を見つけるために見えます。
1. ブルートフォース手法:
STR1:2 1 0
STR2:0 ... 0 ... M M M 0 ....
すべての位置が再び一致
2.KMP
STR2の1次配列の評価を。
場合ミスマッチ2にSTR1のx、X yの修正ジャンプ次配列が位置に対応する、というよりも位置0に戻る
STR2のY
using namespace std;
typedef vector<int> vci;
int getIndexOf(string s, string m)
{
if (s == "" || m == "" || m.length() < 1 || s.length() < m.length())
{
return -1;
}
int X = 0; //str1中比对到的位置
int Y= 0; //str2中比对到的位置
vci next = getNextArray(m); //str2的next数组
while (X < s.length() && Y < m.length()) // XY不越界
{
if (s[X] == m[Y]) //1.匹配 继续
{
X++;
Y++;
}
else if (next[Y] == -1) // 2.匹配不上 ,str1换位置
{
X++;
}
else //3.Ynext数组值不是-1 X停不变,Y往前跳
{
Y = next[Y];
}
}
return Y == m.size() ? X - Y : -1;
}