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

KMP超强模板贴一份

时间:2014-05-17 18:14:24      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   c   java   

bubuko.com,布布扣
while(scanf("%s",str+1)==1 ) {
        int n=strlen(str+1);
        next[1]=0int j=0;
        for(int i=2;i<=n;i++) {
            while(j&&str[j+1]!=str[i]) j=next[j];
            if(str[i]==str[j+1]) j++;
            next[i]=j;
        }
        for(int i=1;i<=n;i++) printf("%d ",next[i]);
bubuko.com,布布扣

 

 随便给出一个字符串  对应的next数组为

 A B R A C D A B R A

 0 0 0 1 0 1 0 2 3 4

 其实就是找前缀了拉

 

 模式匹配代码贴一份。

 

bubuko.com,布布扣
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <cmath>
 5 #include <vector>
 6 #include <list>
 7 #include <queue>
 8 using namespace std;
 9 const int MAX = 1e6+10;
10 const int inf = 0x3f3f3f3f;
11 char str1[MAX],str2[MAX];
12 int next[MAX];
13 int main()
14 {
15     //freopen("in","r",stdin);
16     //freopen("out","w",stdout);
17     int cas;
18     scanf("%d",&cas);
19     while(cas--) {
20         scanf("%s %s",str1+1,str2+1);
21         int n=strlen(str1+1);
22         next[1]=0int j=0;
23         for(int i=2;i<=n;i++) {
24             if(j&&str1[i]!=str1[j+1]) j=next[j];
25             if(str1[i]==str1[j+1]) j++;
26             next[i]=j;
27         }
28         int ans=0;
29         int len=strlen(str2+1); j=0;
30         for(int i=1;i<=len;i++) {
31             while(j&&str2[i]!=str1[j+1]) j=next[j];
32             if(str2[i]==str1[j+1]) j++;
33             if(j==n) ans++;
34 
35         }
36         printf("%d\n",ans);
37 
38     }
39 
40     return 0;
41 }
bubuko.com,布布扣

 

 

KMP超强模板贴一份,布布扣,bubuko.com

KMP超强模板贴一份

标签:style   blog   class   code   c   java   

原文地址:http://www.cnblogs.com/acvc/p/3732873.html

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