字符串匹配之KMP算法
void GetNext(char s[], int len) { Next[0] = -1; int j = -1; for (int i = 1; i < len; i++) { while(j > -1 && s[j+1] != s[i]) j = Next[j]; if (s[j+1] == s[i]) j++; Next[i] = j; } } //计算s的Next数组
int KMP(char s[], int len, char t[], int l, int start, int ended) //在s中从start位置到ended位置之间匹配 t { GetNext(t, l); int j = -1; for (int i = start; i <= ended; i++) { while(j > -1 && t[j+1] != s[i]) j = Next[j]; if (t[j+1] == s[i]) j++; if (j == l-1) return i-l+1; } }