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;
}

  对比上一篇没有改动多少。

 

 

posted @ 2012-11-02 12:36  小猴子、  阅读(284)  评论(0编辑  收藏  举报