hihocoder #1015 KMP
#include<stdio.h> #include<iostream> #include<math.h> #include<string.h> using namespace std; int n,m;//记录两个数组的长度 char a[1000001],b[100000];//打入需要比较的串和比较的串 int p[11111];//记录next函数 void getp() { p[1]=0; int i,j=0; for(i=2;i<=m;i++) { while(j>0&&b[j+1]!=b[i]) j=p[j]; if(b[j+1]==b[i]) j+=1; p[i]=j; } }//高端大气求next int kmp() { int i,j=0,cnt=0; for(i=1;i<=n;i++) { while(j>0&&b[j+1]!=a[i]) j=p[j]; if(b[j+1]==a[i]) j+=1; if(j==m){ cnt++; j=p[j]; } } return cnt; }//低调奢华搞定kmp int main() { int t; cin>>t; while(t--) { scanf("%s%s",b+1,a+1); m=strlen(b+1); n=strlen(a+1); getp(); for(int i=1;i<=m;i++) cout<<p[i]<<endl; cout<<kmp()<<endl; } return 0; }//顺利求解啦啦啦
既然你学KMP这么NB,那不如跟着我一起学做菜吧,啊哈哈