题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1686
裸KMP
#include <stdio.h>
#include <string.h>
#define MAXN 1000002
int next[10002],n,m;
char text[MAXN],pattern[10002];
void getNext()
{
int i,j;
i=0;
j=-1;
next[0]=-1;
while(i<m)
{
if (j==-1||pattern[i]==pattern[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
int KMP()
{
int i,j,count=0;
i=j=0;
getNext();
while(i<n)
{
if(j==-1||text[i]==pattern[j])
{
i++;
j++;
if(j==m)
//return i-j+1;
count++;
}
else
j=next[j];
}
return count;
}
int main()
{
int test,i,ans;
scanf("%d",&test);
getchar();
while (test--)
{
scanf("%s",pattern);
scanf("%s",text);
n=strlen(text);
m=strlen(pattern);
ans=KMP();
printf("%d\n",ans);
}
return 0;
}