我没事做把kmp写成这样了,大家看看。
void getnext(const char*T,int*next){
int i,j;
next[i=0]=j=-1;
while(T[i])
{
while(T[++i]==T[++j])
next[i]=next[j];
next[i]=j;
j=next[j];
}
}
int kmp(char*S,const char*T,int *next){
int i,j;
i=j=0;
while(j<0||S[i]&&T[j]){
if(j<0||S[i]==T[j])++i,++j;
else j=next[j];
}
return T[j]?-1:i-j;
}
void getnext(const char*T,int*next){
int i,j;
next[i=0]=j=-1;
while(T[i])
{
while(T[++i]==T[++j])
next[i]=next[j];
next[i]=j;
j=next[j];
}
}
int kmp(char*S,const char*T,int *next){
int i,j;
i=j=0;
while(j<0||S[i]&&T[j]){
if(j<0||S[i]==T[j])++i,++j;
else j=next[j];
}
return T[j]?-1:i-j;
}