首页 > 代码库 > KMP kmp模板

KMP kmp模板

直接贴代码好了

 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 }

 

KMP kmp模板