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模板
Gambit