#include<iostream> #include<string.h> #include<stdio.h> using namespace std; int next[50005]; char s[50005],t[50005]; void getnext()//next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的前缀。 { int i=0,k=-1; next[0]=-1; int len=strlen(s); while(i<len) { if(s[i]==s[k]||k==-1) { i++; k++; next[i]=k; } else k=next[k]; } /* for(int j=0;j<=len;j++) printf("%d ",next[j]); printf(" "); 输出next数组*/ } void kmp() { int i=0,j=0; int lens=strlen(s); int lent=strlen(t); while(i<lent&&j<lent) { if(s[j]==t[i]||j==-1) { i++; j++; } else j=next[j]; } if(!j) printf("0 "); else { s[j]='