题目大意
有n次询问,问W串在T串中出现的次数
题解
KMP
代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,lenw,lent,nxt[10009];
char w[10009],t[1000009];
void getnext(){
for(int i=2,j=0;i<=lenw;i++){
while(w[i]!=w[j+1]&&j)j=nxt[j];
if(w[i]==w[j+1])nxt[i]=++j;
}
}
int kmp(){
int js=0;
for(int i=1,j=0;i<=lent;i++){
while(t[i]!=w[j+1]&&j)j=nxt[j];
if(t[i]==w[j+1])j++;
if(j==lenw){js++;j=nxt[lenw];}
}
return js;
}
int main(){
scanf("%d",&n);
while(n--){
scanf("%s\n%s",w+1,t+1);
lenw=strlen(w+1);lent=strlen(t+1);
getnext();
printf("%d\n",kmp());
}
return 0;
}
来源:https://www.cnblogs.com/zzyh/p/7354455.html