#include<iostream>
#include<cstring>
using namespace std;
const int maxw=10000+10;
const int maxt=1000000+10;
char word[maxw];
char text[maxt];
int suffix[maxw];
int make()
{
int i,j;
int num=0;
int p=0,cur=0;
int wlen=strlen(word);
int tlen=strlen(text);
while(cur<tlen)
{
if(word[p]==text[cur])
{
p++;
cur++;
}
else if(p>=0)
{
p=suffix[p];
}
else
{
++cur;
p=0;
}
if(p==wlen)
{
++num;
p=suffix[p];
}
}
return num;
}
int main()
{
int k,i;
int t;
cin>>t;
while(t--)
{
cin>>word>>text;
suffix[0]=-1;
suffix[1]=0;
k=0;
for(i=2;i<=strlen(word);i++)
{
while(k>=0&&word[k]!=word[i-1])
k=suffix[k];
suffix[i]=++k;
}
cout<<make()<<endl;
}
return 0;
}
KMP+poj3461
最新推荐文章于 2020-03-26 03:56:14 发布