hdu, KMP algorithm, linear string search algorithm, a nice reference provided
2015-07-18 13:40
309 查看
reference:
Rabin-Karp and Knuth-Morris-Pratt Algorithms By TheLlama– TopCoder Member https://www.topcoder.com/community/data-science/data-science-tutorials/introduction-to-string-searching-algorithms/
// to be improved
Rabin-Karp and Knuth-Morris-Pratt Algorithms By TheLlama– TopCoder Member https://www.topcoder.com/community/data-science/data-science-tutorials/introduction-to-string-searching-algorithms/
// to be improved
[code]#include <cstdio> #include <cstring> #include <algorithm> #define MAXN 1000005 #define MAXM 10005 int nums[MAXN]; int cnums[MAXM]; int ffunc[MAXM]={0}; int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int T,n,m,i,j,k, res; int *p,*pend, *q, *r, *rend; if(scanf("%d",&T)!=1) return -1; while(T-->0 && scanf("%d%d",&n,&m)==2 && n>=m && m>0) { for(i=1;i<=n;++i) scanf("%d",&nums[i]); for(i=1;i<=m;++i) scanf("%d",&cnums[i]); for(i=2;i<=m;++i) { for(j=ffunc[i-1];;j=ffunc[j]) { if(cnums[j+1]==cnums[i] || j==0 && --j) break; } ffunc[i]=j+1; } for(i=1, k=0;;) { if(nums[i]==cnums[k+1]) { ++k; } else if(k>0) { k=ffunc[k]; continue; } if(++i>n || k>=m) break; } res=k!=m?-1:i-m; printf("%d\n",res); } return 0; }
相关文章推荐
- jQuery实现在最后一个元素之前插入新元素的方法
- javascript 字符串加减法
- 将HTML特殊转义为实体字符的两种实现方式
- Web前端学习——JS基础一之DIV格式变换
- 学习老外用webstorm开发nodejs的技巧--代码提示DefinitelyTyped
- jsp-DB
- js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
- js输入一个日期判断该日期是该年的第几天
- [LyncServer2013企业版迁移SkypeForBusinessServer2015企业版]三,部署新前端服务器
- 网页前端 网页换肤(js)
- [Effective Java]第七章 方法
- 浏览器加载和渲染html的顺序
- jquery添加hover事件和销毁hover事件
- C#实现将HTML转换成纯文本的方法
- Web前端知识点总结(一)
- JavaScript 没有函数重载&Arguments对象
- jquery mobile自动弹出popup
- 【原创】贡献一个JS的弹出框代码...
- js获取颜色,颜色3中类型的转换
- CSS3设计边框忽隐忽现功能