Description
给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少.
【题目分析】
和poj上那道循环节的题目很像,但是又没有要求必须是可以整除的。所以直接输出n-next[n]就可以了。一道权限题,14行搞定(没有缩行)。感觉bzoj药丸啊。
【代码】
#include <cstdio>
char s[1000005];
int next[1000005],n,j=0;
int main()
{
scanf("%d%s",&n,s+1);
for (int i=2;i<=n;++i)
{
while (j>0&&s[j+1]!=s[i]) j=next[j];
if (s[j+1]==s[i]) j++;
next[i]=j;
}
printf("%d\n",n-next[n]);
}