首页 > 代码库 > HDU - 1711 Number Sequence
HDU - 1711 Number Sequence
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1711
改进的模式匹配算法--KMP算法,时间复杂度有O(n*m)降到O(n+m),求解next数组之后与常规的模式匹配算法相同。
1 #include<stdio.h> 2 const int maxn=1000000+10,maxm=10000+5; 3 int a[maxn],b[maxm],next[maxm]; 4 void get_next(int m) 5 { 6 int i=1,j=0; 7 next[1]=0; 8 while(i<m){ 9 if(j==0 || b[i]==b[j]) {i++;j++;next[i]=j;}10 else j=next[j];11 }12 }13 int get_index(int n,int m)14 {15 int i=1,j=1;16 while(i<=n && j<=m){17 if(j==0 || a[i]==b[j]){18 i++;19 j++;20 }21 else22 j=next[j];23 }24 if(j>m)25 return i-m;26 else27 return -1;28 }29 int main()30 {31 int t;32 scanf("%d",&t);33 while(t--){34 int n,m;35 scanf("%d%d",&n,&m);36 for(int i=1;i<=n;i++)37 scanf("%d",&a[i]);38 for(int i=1;i<=m;i++)39 scanf("%d",&b[i]);40 get_next(m);41 int ans=get_index(n,m);42 printf("%d\n",ans);43 }44 return 0;45 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。