kmp算法 模板
作者:互联网
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<cstdio> 6 using namespace std; 7 const int maxn = 1000000 + 10 ; 8 char A[maxn],B[maxn]; 9 int p[maxn]; 10 int n,m; 11 void kmp() 12 { 13 int j(0); 14 for(int i=0;i<n;i++) 15 { 16 while(j>0 && B[j+1]!=A[i+1] ) j = p[j]; 17 if(B[j+1]==A[i+1]) j++; 18 if(j==m) 19 { 20 printf("%d\n",i+1-m+1); 21 j=p[j]; 22 } 23 } 24 } 25 int main() 26 { 27 scanf("%s %s",A+1,B+1); 28 p[1]=0; 29 n=strlen(A+1),m=strlen(B+1); 30 int j(0); 31 p[1]=0; 32 for(int i=1;i<m;i++) 33 { 34 while(j>0 && B[j+1]!=B[i+1]) j=p[j]; 35 if(B[j+1]==B[i+1]) j++; 36 p[i+1]=j; 37 } 38 kmp(); 39 for(int i=1;i<=m;i++) printf("%d ",p[i]); 40 return 0; 41 }
标签:int,i0,算法,maxn,kmp,include,strlen,模板 来源: https://www.cnblogs.com/hfang/p/10732114.html