POJ-2406 Power Strings
2016-04-20 21:15
495 查看
题目链接:
http://poj.org/problem?id=2406
题目大意:
求该字符串的最多重复次数
解题思路:
总长度/最小循环节
代码如下:
http://poj.org/problem?id=2406
题目大意:
求该字符串的最多重复次数
解题思路:
总长度/最小循环节
代码如下:
#include <math.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <algorithm> using namespace std; int ans; int srcLen; char src[1000000 + 8]; int kmpNext[1000000 + 8]; void init(); void kmp_per(); void KMP(); int main() { memset(src, 0, sizeof(src)); while (scanf("%s", &src) != EOF&&src[0] != '.') { init(); KMP(); printf("%d\n", ans); } return 0; } void init() { ans = -1; srcLen = strlen(src); memset(kmpNext, 0, sizeof(kmpNext)); } void kmp_per() { int i = 0; int j = -1; kmpNext[0] = -1; while (i < srcLen) { while (-1 != j&&src[i + 1] != src[j + 1]) { j = kmpNext[j]; } if (src[i + 1] == src[j + 1]) { j++; } i++; kmpNext[i] = j; } } void KMP() { kmp_per(); ans = 0; printf("%d %d\n", srcLen, (srcLen - kmpNext[srcLen - 1] - 1)); if (srcLen % (srcLen - kmpNext[srcLen - 1] - 1)) { ans = 1; } else { ans = srcLen / (srcLen - kmpNext[srcLen - 1] - 1); } }
相关文章推荐
- KMP算法的C#实现方法
- JavaScript中数据结构与算法(五):经典KMP算法
- 字符串算法--KMP--Java实现
- KMP算法(转载)
- kmp算法实现
- KMP算法详解
- linux kernel data struct: KMP算法实现
- 求一个字符串中连续出现次数最多的子串
- KMP算法总结
- KMP算法
- KMP字符串匹配算法
- 字符串匹配之KMP算法
- kmp
- 【hiho一下第三周】KMP计算模式串在原串出现次数
- HDU1711 模板题-KMP
- HDU1358:Period
- hdu1711
- POJ 2406 Power Strings
- KMP next[]数组
- kmp 学习 hihocoder #1015