hdu1686(kmp)
http://acm.hdu.edu.cn/showproblem.php?pid=1686
#include<iostream>
using namespace std;
int next[10005];
char s[10005],t[1000006];
void getnext(char s[])
{
int i=0,j=-1;
next[0]=-1;
int len=strlen(s);
while(i<len)
if(j==-1||s[i]==s[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
int kmp(char s[],char t[])
{
int num=0,i=0,j=0;
int len=strlen(s);
int lenn=strlen(t);
while(i<lenn&&j<len)
{
if(j==-1||s[j]==t[i])
{
i++;
j++;
}
else
j=next[j];
if(j>=len)
{
num++;
//printf("\n%d\n",i);
j=next[j];
}
}
return num;
}
int main()
{
int f;
scanf("%d",&f);
while(f--)
{
scanf("%s",s);
scanf("%s",t);
getnext(s);
printf("%d\n",kmp(s,t));
}
return 0;
}
朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号