您的位置:首页 > 其它

KMP kmp模板

2017-07-10 01:04 411 查看
直接贴代码好了

1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #include<algorithm>
5 using namespace std;
6 int next[10010];
7 char a[10010],b[10010];
8
9 int main(){
10     scanf("%s%s",a+1,b+1);
11     int lenb=strlen(b+1);
12     int j=0;
13     for(int i=2;i<=lenb;i++){//从2开始!!!
14         while(j&&b[j+1]!=b[i]) j=next[j];
15         j+=(b[j+1]==b[i]);
16         next[i]=j;
17     }
18     int lena=strlen(a+1);
19     j=0;
20     for(int i=1;i<=lena;i++){
21         while(j&&a[i]!=b[j+1]) j=next[j];
22         j+=(a[i]==b[j+1]);
23         if(j==lenb) printf("%d\n",i-lenb+1);
24     }
25     for(int i=1;i<=lenb;i++) printf("%d ",next[i]);
26     return 0;
27 }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: