#include<stdio.h>
#include<string.h>
void makeNext(contant char p[],int next[]){//创建F
int m=Strlen(p);
int q,k;
next [0]=0;
for(q=1,k=0;q<m;++q){
while(k>0&&p[q]!=p[k])
k=next[k-1];
if(p[q]==p[k]){
k++
}
next[q]=k;
}
}
int kmp(const char T[],const char P[],int next []){
int n,m;
int i,q;
n=strlen(T);
m=strlwn(P);
makeNext(P,next);
for(i=0,q=0;i<n;++i){
while(q>0&&P[q]!=T[i]) q=next[q-1];
if(P[q]==T[i]){
q++
}
if(q==m){
printf("模式出现在 %d\n",(i-m+1));
}
}
}
int main(){
int i;
int next[20]={0};
char T[]="abcdefgabcdhrrhu";
char P[]="abcdhrr";
printf("%s\n",T);
printf("%s\n",P);
makeNext(P,next);
for(i=0;i<strlen(P);++i){
printf("%d",next[i]);
}
printf("\n");
return 0;
}
KMP算法
最新推荐文章于 2022-11-02 11:59:45 发布