POJ2752_通过kmpNext数组的性质求一个字符串的公共同前后缀
2017-07-20 10:13
323 查看
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> using namespace std; const int maxn = 500000; char S[maxn]; int Next[maxn]; int V[maxn]; int Vcnt; void getNext(int len) { len++;//用于把\0也给统计进去 int k = -1; Next[0] = -1; for (int i = 0; i < len;) { while (k > -1 && S[i] != S[k]) { k = Next[k]; } i++; k++; Next[i] = k;//使用没有优化的方法构建next数组 } } void solve(int len) { len++; for (int i = len - 1; i >= 0; ) { V[Vcnt++] = Next[i]; i = Next[i]; } } int main() { while (~scanf("%s", S)) { int len = strlen(S); Vcnt = 0; getNext(len); V[Vcnt++] = len; solve(len); bool flag = true; for (int i = Vcnt - 1; i >= 0; i--) { if (!flag) { cout << " "; } if (V[i] > 0) { cout << V[i]; flag = false; } } cout << endl; } }
相关文章推荐
- kuangbin专题十六 POJ2752(好题) KMP的next数组性质的考察
- (KMP 1.4)hdu 3746 Cyclic Nacklace(使用next数组来求循环节的长度——求一个字符串需要添加多少个字符才能使该字符串的循环节的个数>=2)
- 求最长公共前缀和后缀—基于KMP的next数组
- POJ 2752+KMP+利用next数组性质求出所有相同的前缀和后缀
- 寻找一个字符串数组的最长公共前缀
- 51nod 1277 字符串中的最大值 (kmp之next数组的理解) O(n)可过
- 字符串 --- KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组
- 字符串:KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组(转)
- 【后缀数组】 POJ 2774 Long Long Message 两个字符串的最长公共子串长度
- Seek the Name, Seek the Fame---poj2752(kmp中的Next数组)
- 用后缀数组 求一个字符串的最长重复字串
- 字符串:KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组
- Rust : 求出一个字符串数组中最长的公共连续子序列
- 字符串:KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组
- T-SQL Tips: 通过Json字符串传递一个数组
- 字符串:KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组 - 星星的日志 - 网易博客
- poj 2185 Milking Grid(KMPnext数组的性质+lcm)
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
- poj 3450 Corporate Identity(后缀数组 多个字符串的最长公共字串)
- poj 1226 出现或反转后出现在每个字符串中的最长子串(后缀数组/kmp)