hdu_1358 kmp 求连续子串
来源:互联网 发布:js类数组和数组的区别 编辑:程序博客网 时间:2024/05/22 12:48
KMP算法 时间复杂度O(m+n)
这道题是练习KMP重要的 next 数组的好题
预处理数组 next[] ,第i位表示当匹配到此位置时下一位不匹配应该回复到的位置. 具体代码如下:
void Computer_Prefix_Funtion(string p,vector<int>& e){ int k=-1; e[0]=-1; for(int q=1;q<n;q++) { while(k>=0&&p[k+1]!=p[q]) k=e[k]; if(p[k+1]==p[q]) k++; e[q]=k; }} //p为待处理字符串,e为next数组
整体代码:
#include <iostream>#include <string>#include <vector>using namespace std;int n;void Computer_Prefix_Funtion(string p,vector<int>& e){ int k=-1; e[0]=-1; for(int q=1;q<n;q++) { while(k>=0&&p[k+1]!=p[q]) k=e[k]; if(p[k+1]==p[q]) k++; e[q]=k; }}int main(){ int j=0; while(cin>>n&&n) { j++; string p; cin>>p; cout<<"Test case #"<<j<<endl; vector<int> e(n); Computer_Prefix_Funtion(p,e); for (int i=1;i<n;i ++) if(!((i+1)%(i-e[i]))&& e[i]!= -1) cout<<i+1<<" "<<(i+1)/(i-e[i])<<endl; cout<<endl; } return 0;}
- hdu_1358 kmp 求连续子串
- poj 2406 kmp求连续重复子串的个数
- poj 2406 Power Strings 【KMP求最小循环节】【后缀数组求连续重复子串】
- Period (HDU_1358) KMP+循环节
- 求最长连续公共子串
- 【kmp】【后缀数组】【连续重复子串】Power Strings POJ2406
- 求两个字符串的最长的连续公共子串
- [BD-EXAM]求字符串的最长连续数字子串
- 求一个字符串中的最长连续子串
- 求一个字符串中的最大连续重复子串
- 求两个字符串的最长的连续公共子串
- 求字符串中最长连续数字子串的长度
- 求两个字符串的最长的连续公共子串
- hdu 1003 求最长连续子串和
- 求一个字符串中最长连续子串
- 求字符串中连续出现次数最多的子串
- 求一个字符串连续出现次数最多的子串
- POJ 2406 后缀数组:求连续重复子串
- ListBox的应用(左框中信息移至右框)
- 用javascript 实现的万年历代码。
- IIs部署虚拟网站
- 第二次作业
- 方块填数
- hdu_1358 kmp 求连续子串
- Opensuse Graphviz,使用DOT代替VISIO
- 65个面试技巧性回答值得收藏
- 每日编程20之用一个数组实现2个和3个栈
- NameValueCollection详解
- Android_Phone源代码来电流程解读
- const限定符和指针
- Js弹窗参数
- 软件项目中qt的使用