KMP模板
2015-08-01 10:33
330 查看
len1和len2用全局变量,有个题目一直用strlen来表示就T了。
next数组的应用
如果对于next数组中的 i, 符合 i % ( i - next[i] ) == 0 && next[i] != 0 , 则说明字符串循环:
循环节长度为: i - next[i]
循环次数为: i / ( i - next[i] )
求前后缀的长度,并把长度按照从小到大的顺序输出 - poj 2753
http://www.cnblogs.com/dongsheng/archive/2012/08/13/2636261.html这篇题解写的很好
kmp博大精深,next数组千变万化。该博长期更新,kmp之路永不止。
[code]void calnext()//计算next数组 { int i=0,cnt=-1; next[i]=cnt; while(i<len) { if(cnt==-1 || str[i]==str[cnt]) i++,cnt++,next[i]=cnt; else cnt=next[cnt]; } return; }
[code]bool kmp()//KMP查找是否有字串 { int ans=0; int i=0,j=0; while(i<len2 && j<len1) { if(j==-1 || s1[j]==s2[i]) i++,j++; else j=next[j]; if(j==len1) return true; } return false; }
[code]int kmp() //查找主串中含有几个字串,并返回个数,如在'abababa'中找'aba',ans=3 { int ans=0; int i=0,j=0; while(i<len2 && j<len1) { if(j<0 || s1[j]==s2[i]) i++,j++; else j=next[j]; if(j==len1) { j=next[j]; ans++; } } return ans; }
next数组的应用
如果对于next数组中的 i, 符合 i % ( i - next[i] ) == 0 && next[i] != 0 , 则说明字符串循环:
循环节长度为: i - next[i]
循环次数为: i / ( i - next[i] )
求前后缀的长度,并把长度按照从小到大的顺序输出 - poj 2753
http://www.cnblogs.com/dongsheng/archive/2012/08/13/2636261.html这篇题解写的很好
kmp博大精深,next数组千变万化。该博长期更新,kmp之路永不止。
相关文章推荐
- android用getIdentifier()获取资源Id
- Shiro学习(22)集成验证码
- 学习CGI脚本 (脚本)
- 浅析Java中的访问权限控制
- 我在csdn落脚的第一篇文章
- Asterisk 函数
- js和jQuery的区别
- POJ 1573 Robot Motion(模拟)
- Shiro学习(21)授予身份及切换身份
- poj 2828
- PAT (Advanced Level) 1098. Insertion or Heap Sort (25) 直插和堆排
- 时间选择器wheelView
- hdu1150 Machine Schedule(最小点覆盖)
- 【Win10】联想Z50-70升级到Win10,声音变成环绕声解决办法
- 【NOIP2003】加分二叉树题解
- android 微信支付成功,未返回回调页面
- 2015ACM多校对抗赛第四场 hdu 5336
- 详解Python3中的Sequence type的使用
- Dijkstra算法(戴克斯特拉算法)
- Shiro学习(20)无状态Web应用集成