标签:
关于KMP算法的讲解网上有很多,但是写法五花八门,下面是我的写法,贴出来防止忘记。
1.求next[]
1 void get_next(char *P,int *next){ 2 int plen=strlen(p); 3 next[0]=-1; 4 int j=0; 5 for(int i=1;i<Plen;i++){ 6 if(P[i]==P[j]){ 7 next[i]=j; 8 j++; 9 } 10 else{ 11 if(P[i]==P[0]){ 12 next[i]=0; 13 j=1; 14 } 15 else{ 16 next[i]=-1; 17 j=0; 18 } 19 } 20 } 21 }
2.字符串匹配
1 void find(char *target,char *P,int *next){ 2 int j=0; 3 for(int i=0;i<strlen(target);){ 4 if(P[j]==target[i]){ 5 if(j==strlen(P)-1){ 6 printf("%d",i-j); 7 break; 8 } 9 else{ 10 i++;j++; 11 } 12 } 13 else{ 14 if(j==0||next[j-1]==-1){ 15 j=0;i++; 16 } 17 else{ 18 j=next[j-1]+1; 19 } 20 } 21 } 22 }
标签:
原文地址:http://www.cnblogs.com/CXCXCXC/p/4681625.html