kmp模板
来自matrix67,很好用很好理解
1 int find(char *A,char *B,int n,int m) 2 { 3 int i,j=0; 4 for (i=1;i<=n;i++) 5 { 6 while (j>0&&B[j+1]!=A[i]) j=next[j]; 7 if (B[j+1]==A[i]) j++; 8 if (j==m) return i-m+1; 9 } 10 return -1; 11 } 12 void getnext(char *B,int m) 13 { 14 int i,j; 15 next[1]=j=0; 16 for (i=2;i<=m;i++) 17 { 18 while (j>0&&B[j+1]!=B[i]) j=next[j]; 19 if (B[j+1]==B[i]) j++; 20 next[i]=j; 21 } 22 }