hihoCoder#1015 : KMP算法 (KMP模板)
代码如下:
# include<iostream> # include<cstdio> # include<cstring> # include<vector> # include<queue> # include<list> # include<set> # include<map> # include<string> # include<cmath> # include<cstdlib> # include<algorithm> using namespace std; # define LL long long const int N=1005; const int INF=1000000000; const LL oo=0x7fffffffffffffff; const double eps=1e-10; int f[N*10]; void getNext(string p) { int n=p.length(); f[0]=f[1]=0; for(int i=1;i<n;++i){ int j=f[i]; while(j&&p[i]!=p[j]) j=f[j]; f[i+1]=(p[i]==p[j])?j+1:0; } } int solve(string p,string q) { getNext(q); int n=p.length(); int m=q.length(); int ans=0; int j=0; for(int i=0;i<n;++i){ while(j&&p[i]!=q[j]) j=f[j]; if(p[i]==q[j]) ++j; if(j==m) ++ans; } return ans; } int main() { int T; string p,q; scanf("%d",&T); while(T--) { cin>>p>>q; printf("%d\n",solve(q,p)); } return 0; }