码迷,mamicode.com
首页 > 编程语言 > 详细

KMP算法模板

时间:2015-07-28 00:30:20      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

  关于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算法模板

标签:

原文地址:http://www.cnblogs.com/CXCXCXC/p/4681625.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!