标签:kmp
题意:
在a串中寻找第一个包含b串的的位置
思路:直接KMP即可
#include <cstdio>
#define MAXN 1000010
using namespace std;
void kmp_pre(int x[],int m,int next[]){
int i,j;
j=next[0]=-1;
i=0;
while(i<m){
while(-1!=j&&x[i]!=x[j]) j=next[j];
if(x[++i]==x[++j]) next[i]=next[j];
else
next[i]=j;
}
}
int next[10010];
int kmp(int x[],int m,int y[],int n){
kmp_pre(x,m,next);
int i,j;
i=j=0;
while(i<n){
while(-1!=j&&y[i]!=x[j]) j=next[j];
++i,++j;
if(j>=m){
return i-m+1;
}
}
return -1;
}
int y[MAXN];
int x[10010];
int n,m;
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i=0;i<n;++i)
scanf("%d",&y[i]);
for(int i=0;i<m;++i)
scanf("%d",&x[i]);
printf("%d\n",kmp(x,m,y,n));
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdu1711 Number Sequence(KMP水题)
标签:kmp
原文地址:http://blog.csdn.net/mengxingyuanlove/article/details/47339523