kmp

关于字符串匹配问题的学习

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 char a[100],b[100];
 5 int net[100];
 6 int ans=0;
 7 void initnext(char b[],int m){
 8     for(int i=2,j=0;i<=m;i++){
 9         while(j&&b[i]!=b[j+1]) j=net[j];
10         if(b[i]==b[j+1]) j++;
11         net[i]=j;
12     }
13 }
14 
15 void kmp(char a[],char b[],int n,int m){
16     initnext(b,m);
17     for(int i=1,j=0;i<=n;i++){
18         while(j&&a[i]!=b[j+1]) j=net[j];
19         if(a[i]==b[j+1]) j++;
20         if(j==m){
21             j=net[j];
22             ans++;
23             cout<<i-m+1<<" ";
24         }
25     }
26     cout<<endl<<ans;
27 }
28 
29 int main()
30 {
31     int n,m;
32     cin>>n>>m;
33     for(int i=1;i<=n;i++) cin>>a[i];
34     for(int i=1;i<=m;i++) cin>>b[i];
35     kmp(a,b,n,m);
36     return 0;
37 }

kmp模板

posted @ 2020-11-08 10:55  ideologue  阅读(52)  评论(0编辑  收藏  举报