首页 > 其他 > 详细

KMP未优化模板、

时间:2016-01-27 12:57:09      阅读:143      评论:0      收藏:0      [点我收藏+]

要理解KMP最重要的一点就是防止重复的回溯、

!!!很重要!!!很重要!!!很重要

要了解KMP可以去:http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html

首先要生成模板串的next数组

 1 void getNext(char *p,int *next)
 2 {
 3     int j,k;
 4     next[0]=-1;
 5     j=0;
 6     k=-1;
 7     while(j<strlen(p)-1)
 8     {
 9         if(k==-1||p[j]==p[k])    //匹配的情况下,p[j]==p[k]
10         {
11             j++;
12             k++;
13             next[j]=k;
14         }
15         else                   //p[j]!=p[k]
16             k=next[k];
17     }
18 }

然后来匹配、

 1 int KMPMatch(char *s,char *p)
 2 {
 3     int next[100];
 4     int i,j;
 5     i=0;
 6     j=0;
 7     getNext(p,next);
 8     while(i<strlen(s))
 9     {
10         if(j==-1||s[i]==p[j])
11         {
12             i++;
13             j++;
14         }
15         else
16         {
17             j=next[j];       //消除了指针i的回溯
18         }
19         if(j==strlen(p))
20             return i-strlen(p);
21     }
22     return -1;
23 }

 

KMP未优化模板、

原文:http://www.cnblogs.com/sasuke-/p/5162685.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!