`
人生难得糊涂
  • 浏览: 114347 次
社区版块
存档分类
最新评论

poj2406-求主串的周期子串

    博客分类:
  • KMP
阅读更多

题目大意:给出一个字符串,将其分解为若干子串的和,求可分解的最多子串的个数。

做题之前就知道这是一道KMP的题目,但一直没想到怎么写  后面看了下别人的思路(最近写题总是会忍不住看别人的思路 惭愧。。)   得出结论: 一个串的周期子串长度=主串长-next[主串长度].  然后再用主串长除以周期子串长度就得到了子串周期长度。

下面贴代码

#include "iostream"
using namespace std;
#define len 1000020
char c[len];
int next[len];
int clen;
void getnext()
{
	int i;
	int j;
	i=0;
	j=-1;
	next[0]=-1;

	while (i<clen)
	{
		if (j==-1||c[i]==c[j])
		{
			i++;
			j++;
			next[i]=j;
		}
		else
		{
			
			j=next[j];
		}
	}
	
}

int main()
{
	while (true)
	{
		scanf("%s",c);
		if (c[0]=='.')
		{
			break;
		}
		clen=strlen(c);
		getnext();
		int t=clen-next[clen];
		if (c[clen-1]!=c[t-1])
		{
			printf("1\n");//注意考虑如aabaabaa 这种结果为1的情况
		}
		else
		{
			printf("%d\n",clen/(clen-next[clen]));
		}
	}
	
	return 0;
	
}

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics