临近期末了,要开始复习了,先复习一下数据结构的kmp算法吧
求next数组的代码
void Getnext(string t)
{
int j = 0, k = -1;
nex[0] = -1;
while (j < t.length())
{
if (k == -1 || t[j] == t[k])
{
j++; k++;
nex[j] = k;
}
else k = nex[k];
}
}
kmp算法
int kmpmatach(string ms, string ts) {
int tlen = ts.length();
for (int i = 0, j = 0; ms[i];) {
if (j == -1 || ms[i] == ts[j]) {
if (j == tlen - 1) {
return i - tlen + 1; //返回模式串首字符在主串中的位置
}
else
i++, j++;
}
else
j = nex[j];
}
return -1;
}