题目链接:
http://poj.org/problem?id=3461
分析:
kmp算法,以前没接触过,在网上看到了一个关于kmp算法的博客,挺生动的。
给出链接:
http://www.cnblogs.com/c-cloud/p/3224788.html
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<vector>
#include<set>
#include<queue>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=10000+5;
int n,s1len,s2len,res;
int next[maxn];
char s1[maxn],s2[1000005];
//获取next表
void getnext()
{
int i=0,j=-1;
next[0]=-1;
while(i!=s1len)
{
if(j==-1||s1[i]==s1[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
void kmp()
{
int i=0,j=0;
getnext();
while(i!=s2len&&j!=s1len)
{
if(j==-1||s2[i]==s1[j])
{
i++;j++;
}
else
j=next[j];
if(j==s1len)
{
res++;
j=next[j];
}
}
}
int main()
{
scanf("%d",&n);
while(n--)
{
scanf("%s",s1);
scanf("%s",s2);
//cout<<s1<<endl;
//cout<<s2<<endl;
memset(next,0,sizeof(next));
s1len=strlen(s1);
s2len=strlen(s2);
res=0;
kmp();
printf("%d\n",res);
}
}