KMP模版留念
来源:互联网 发布:淘宝店铺首页导航栏 编辑:程序博客网 时间:2024/06/05 14:22
void getnext(int s[],int next[],int len){ int i=0,j=-1; next[0]=-1; while(i<len) { if(j==-1 || s[i]==s[j]) i++,j++,next[i]=j; else j=next[j]; }}// 字符串a中从pos处开始寻找字符串b的位置int KMP(const int a[],const int b[],int pos,int next[],int la,int lb){ int i=pos,j=0; next[0]=-1; while(i<la && j<lb) { if(j==-1 || a[i]==b[j]) i++,j++; else j=next[j]; } if(j>=lb) return i-lb+1; else return -1;}int a[1000005],b[1000005],next[1000005];int main(){ int m,n,t,i,j; scanf("%d",&t); while(t--) { scanf("%d%d",&m,&n); for(i=0;i<m;i++) scanf("%d",&a[i]); for(j=0;j<n;j++) scanf("%d",&b[j]); getnext(b,next,n); printf("%d\n",KMP(a,b,0,next,m,n)); }}