题意:
给你两个字符串p和s,求出p在s中出现的次数。
这道题,abababa中aba出现了3次。
有其他题是求abababa,aba就是2次。
需注意。
//#include<bits/stdc++.h> //using namespace std; #include<cstdio> #include<iostream> #include<queue> #include<algorithm> #include<string.h> using namespace std; typedef long long LL; const int N=1e6+10; const int M=1e4+10; int next[10010]; char s[1000010]; char p[10010]; int lenp,lens; void print() { for(int i=0;i<lenp;i++) printf("%3d",next[i]); puts(""); } void GetNext() { int i,j; next[0]=-1; i=0; j=-1; while(i<lenp) { if(j==-1||p[i]==p[j]) { i++; j++; next[i]=j; } else j=next[j]; } // print(); } int KMP() { int ans=0,i=0,j=0; while(i<lens&&j<lenp) { if(j==-1||p[j]==s[i]) { i++;j++; } else j=next[j]; if(j==lenp) { ans++; j=next[j]; } } return ans; } int main() { int T,ans; scanf("%d",&T); while(T--) { scanf("%s%s",p,s); lens=strlen(s); lenp=strlen(p); GetNext(); //getnext(); ans=KMP(); printf("%d ",ans); } return 0; }