您的位置:首页 > 其它

poj3461 KMP

2016-02-01 00:12 211 查看
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

char a[10005],b[1000005];
int nexta[10005];

void getnext(){
int len=strlen(a);
nexta[0]=-1;
int k=-1;
int j=0;

while(j<len)
{
if(k==-1||a[j]==a[k]){
++j;
++k;
if(a[j]!=a[k])
nexta[j]=k;
else
nexta[j]=nexta[k];
}
else
k=nexta[k];
}
}

int kmp()
{
int len_a=strlen(a);
int len_b=strlen(b);
int count=0;
int j=0;
int i=0;

while(j<len_b){
if(i==-1||a[i]==b[j]){
i++;
j++;
}
else
i=nexta[i];

if(i==len_a){
count++;
i=nexta[i];
}
}
return count;
}

int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%s%s",a,b);

getnext();
int temp=kmp();
printf("%d\n",temp);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: