KMP算法模板

  关于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 }

 

你可能感兴趣的:(KMP)