模板题
题意:输出W字符串在T字符串中出现的次数,可以重复,刚开始TLE了几次,原来是数组小了,还有就是next开成全局用G++提交会编译错误。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
using namespace std;
#define LL long long int
#define N 1000005
#define MAX (1<<31)-1
char A[N],B[N];
int Next[N];
void kmp_pre(char x[],int m){
int i=0,j=Next[0]=-1;
while(i<m){
if(j==-1||x[i]==x[j]) Next[++i]=++j;
else j=Next[j];
}
}
int KMP_Count(char x[],int m,char y[],int n){
int i=0,j=0,ans=0;
memset(Next,0,sizeof(Next));
kmp_pre(x,m);
while(i<n){
if(j==-1||x[j]==y[i]) i++,j++;
else j=Next[j];
if(j>=m){
ans++;
j=Next[j];
}
}
return ans;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%s%s",A,B);
int n=strlen(A);
int m=strlen(B);
printf("%d\n",KMP_Count(A,n,B,m));
}
return 0;
}