Luo Gu P3375 [template] KMP string matching problem solution

Today learned KMP algorithm ......

Content not want to write too long:

http://www.matrix67.com/blog/archives/115

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

 

Guess you like

Origin www.cnblogs.com/handsome-zyc/p/11280865.html