#include<bits/stdc++.h>
int N;
char str[N],pattern[N];
int getfail(char *p,int plen){
next[0]=0;next[1]=0;
for(int i=1;i<plen;i++){
int j=next[i];
while(j&&p[i]!=p[j]){
j=next[j];
}
next[i+1]=(p[i]==p[j])?j+1:0;
}
}
int kmp(char *s,char *p){
int last=-1;
int slen=strlen(s),plen=strlen(p);
getfail(p,plen);
int j=0;
for(int i=0;i<slen;i++){
while(j&&s[i]!=p[j]) j=next[j];
}
if(s[i]==p[j]){
j++;
}
if(j==plen) //匹配完成
return 1;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交