首页 > 代码库 > KMP算法的定义及KMP练手题 HDU 1711 Number Sequence (我的模板代码)
KMP算法的定义及KMP练手题 HDU 1711 Number Sequence (我的模板代码)
题意:就是要你来找出b数组在a数组中最先匹配的位置,如果没有则输出-1
思路:直接KMP算法(算法具体思想这位牛写的不错http://blog.csdn.net/v_july_v/article/details/7041827)
AC代码:
#include<cstdio> #include<cstring> #include<stdlib.h> #include<iostream> using namespace std; #define maxn 1000005 int b[10005]; int a[maxn]; int next[maxn]; int n,m; /*void GetNext() { next[0] = -1; int k=-1; int j=0; while(j<m) { if (k==-1||b[j]==b[k]) { ++k; ++j; next[j]=k; } else { k=next[k]; } } }*/ void GetNext() { next[0] = -1; int k=-1; int j=0; while (j<m) { if (k==-1||b[j]==b[k]) { ++j; ++k; if (b[j]!=b[k]) next[j] = k; else next[j] = next[k]; } else { k=next[k]; } } } int KmpSearch() { int i=0,j=0; while(i<n&& j <m) { if (j==-1||a[i]==b[j]) { i++; j++; } else j=next[j]; } if(j==m) return i-j+1; else return -1; } int main() { int i,j,t; 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]); GetNext(); printf("%d\n",KmpSearch()); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。