标签:kmp
思路:裸裸的kmp算法;
#include<stdio.h> #include<string.h> int next[5000100],a[5000100],b[5000010]; int n,m; void getnext() { int i=0,j=-1; memset(next,0,sizeof(next)); next[0]=-1; while(i<m) { if(j==-1||b[i]==b[j]) next[++i]=++j; else j=next[j]; } } int kmp() { int i,j=0; for(i=0;i<n;) { if(a[i]==b[j]) { if(j==m-1) return i-(m-1)+1; i++,j++; } else { j=next[j]; if(j==-1) {i++;j=0;} } } return -1; } int main() { int T,i,j,k; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<m;i++) scanf("%d",&b[i]); if(n<m) { printf("-1\n"); continue; } getnext(); printf("%d\n",kmp()); } return 0; }
标签:kmp
原文地址:http://blog.csdn.net/dominating413421391/article/details/44201173