#include <stdio.h>
#include <string.h>
#define N 1000010
int next[N];
char s[N];
char t[N];
void get_next(char s[] ,int len)
{ int i,j=0;
next[1]=0;
for(i=2;i<=len;i++)
{ while(j>0&&s[j+1]!=s[i])
j=next[j];
if(s[j+1]==s[i])
j++;
next[i]=j;
}
}
int kmp(char P[],int lenP,char t[],int lent)
{
get_next(P,lenP);
int ret=0,i,j=0;
for(i=1;i<=lent;i++)
{
while(P[j+1]!=t[i]&&j>0)
j=next[j];
if(P[j+1]==t[i])
j++;
if(j==lenP)
{
ret++;
j=next[j];
}
}
return ret;
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%s",s+1);
scanf("%s",t+1);
int lens=strlen(s+1);
int lent=strlen(t+1);
int ans=kmp(s,lens,t,lent);
printf("%d\n",ans);
}
}
POJ 3461
最新推荐文章于 2022-04-20 20:32:26 发布