Kmp 模板(邝斌 - 人一我百,人百我万)
2016-05-18 22:20
190 查看
1,求第一次匹配的位置
2,求主串中模式串匹配的次数
3,求 Next 数组的时候
void getNext(int m){ int i=0,j=-1; Next[0]=-1; while(i < m){ if(j == -1 || p[i] == p[j]) Next[++i] = ++j; else j=Next[j]; } } bool Kmp(int n,int m){ getNext(m); int i = 0,j = 0; while(i < n && j < m){ if(j == -1 || s[i] == p[j]){ i++; j++; } else j=Next[j]; } if(j >= m) return true; else return false; }
2,求主串中模式串匹配的次数
void getNext(int m){ Next[0]=-1; int i = 0,j = -1; while(i < m){ if(j == -1 || p[i] == p[j]) Next[++i]=++j; else j = Next[j]; } } int Kmp(int n,int m){ getNext(m); int i = 0,j = 0; int ans = 0; while(i < n && j < m){ if(j == -1 || s[i] == p[j]){ i++; j++; } else j = Next[j]; if(j >= m){ ans++; j = Next[j]; } } return ans; }
3,求 Next 数组的时候
Next[++i]=++j;总是会忘了 ++i,和++j。一定注意别忘了 ++。
相关文章推荐
- Android 中String文件通配符使用
- [图论] zoj1015
- 《jQuery从入门到精通》第二节 开始使用jQuery(二)
- MyEclipse优化设置
- 面筋: 奇虎360 c++ 后台开发 实习生 面试
- 寻找水王
- [数据库事务与锁]详解六: MySQL中的共享锁与排他锁
- 第十二周(补)
- 连续子数组的最大和
- 第十二周学习进度表
- [数据库事务与锁]详解五: MySQL中的行级锁,表级锁,页级锁
- Flume event转化为ES的document过程分析
- 网络流二十四题之十二 —— 软件补丁问题(BUG)
- 描述系统架构—部署图、组件图
- imfilter()函数的用法
- iOS 蓝牙开发(二)iOS 连接外设的代码实现
- min3d用法
- "围观"设计模式(13)--结构型之装饰模式(Decorator Pattern)
- 第2章 从HTML、XHTML到HTML5
- 数据结构实验之栈二:一般算术表达式转换成后缀式