临近期末了,要开始复习了,先复习一下数据结构的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; }