int next[M];
void GetNext(
char t[]){
next[
0]=
0;
int j=
0;
for(
int i=
1;t[i];i++){
while(j>
0&&t[i]!=t[j])
j=next[j-
1];
if(t[i]==t[j])
j++;
next[i]=j;
}
}
int KMP(
char s[],
char t[],
int pos){
GetNext(t);
int j=
0;
int len=
strlen(t);
for(
int i=pos;s[i];i++){
while(j>
0&&s[i]!=t[j])
j=next[j-
1];
if(s[i]==t[j])
j++;
if(j==len)
return i-j+
1;
}
return -
1;
}
转载请注明原文地址: https://www.6miu.com/read-55701.html