KMP kmp模板

来源:互联网 发布:linux shell 打印变量 编辑:程序博客网 时间:2024/06/03 12:36
直接贴代码好了

 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 }