标签:kmp
#include <stdio.h> #include <string.h> int next[10005]; int str1[1000005],str2[10005]; void build_next(int len2) { int i=0,j=-1; next[0] = -1; while (i < len2) { if (j==-1 || str2[i] == str2[j]) { i++; j++; if (str2[i] != str2[j]) { next[i] = j; } else next[i] = next[j]; } else j = next[j]; } } int KMP(int len1,int len2) { build_next(len2); int i=0,j=0,cnt; while (i < len1) { if (j==-1 || str1[i] == str2[j]) { i++; j++; if(j==len2) //在这里判断是否为全部匹配 return i-len2+1; } else j = next[j]; } return -1; //最后还未匹配成功,直接返回-1 } int main() { int N,n,m,i; scanf("%d",&N); while (N--) { scanf("%d%d",&n,&m); for(i=0;i<n;i++) scanf("%d",&str1[i]); for(i=0;i<m;i++) scanf("%d",&str2[i]); if(n<m) printf("-1\n"); else { n=KMP(n,m); printf("%d\n",n); } } return 0; }
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
分析:题目将字符串换成了数字,原理还是一样的,简单KMP
2 13 5 1 2 1 2 3 1 2 3 1 3 2 1 2 1 2 3 1 3 13 5 1 2 1 2 3 1 2 3 1 3 2 1 2 1 2 3 2 1
6 -1
HDU 1711 Number Sequence (简单KMP)
标签:kmp
原文地址:http://blog.csdn.net/xinwen1995/article/details/46124561