poj 2406 Power Strings[kmp,next数组的应用]
题目链接 http://poj.org/problem?id=2406
大致题意:题目要我们求出一个字符串得最大循环长度!
做过了poj1961这个题就一点问题都没有了
要知道next数组的含义和 if(i % (i-j) == 0 && i / (i-j) > 1)的含义,我在上篇解题报告上贴了,也就是poj 1961中。
直接贴代码吧
#include<stdio.h> #include<string.h> char str[1000002]; int next[1000002]; int main() { while(scanf("%s", str) != EOF) { if(str[0] == '.') break; int len = strlen( str ); int i, j; i = 0; j = -1; next[0] = -1; while(i < len) { if(j == -1 || str[i] == str[j]) { i++; j++; next[i] = j; } else { j = next[j]; } } if(i % (i-j) == 0 && i / (i-j) > 1) { printf("%d\n", i/(i-j)); } else { printf("1\n"); } } return 0; }
对比上一篇没有改动多少。