码迷,mamicode.com
首页 > 其他好文 > 详细

扩展KMP模板

时间:2016-07-23 13:30:29      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

 1 struct ExKmp{
 2     void Init(){
 3         memset(f,0,sizeof(f));
 4         memset(r,0,sizeof(r));
 5     }
 6     
 7     void Get_Fail(){
 8         f[1]=lent;
 9         while(t[2+f[2]]==t[1+f[2]])
10             f[2]+=1;p=2;
11         for(int i=3;i<=lent;i++){
12             int k=p+f[p]-1,L=f[i-p+1];
13             if(i+L-1<k)f[i]=L;
14             else{
15                 f[i]=max(0,k-i+1);
16                 while(t[1+f[i]]==t[i+f[i]])
17                     f[i]+=1;p=i;
18             }
19         }    
20     }
21     
22     void Exkmp(){
23         Init();Get_Fail();
24         while(s[1+r[1]]==t[1+r[1]])
25             r[1]++;p=1;
26         for(int i=2;i<=lens;i++){
27             int k=p+r[p]-1,L=f[i-p+1];
28             if(i+L-1<k)r[i]=L;
29             else{
30                 r[i]=max(0,k-i+1);
31                 while(t[1+r[i]]==s[i+r[i]])
32                     r[i]+=1;p=i;
33             }
34         }    
35     }
36 }kmp;

 

扩展KMP模板

标签:

原文地址:http://www.cnblogs.com/TenderRun/p/5698385.html

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