给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少.
这道题有大bug,提示乱写,其实样例循环节为“cab”。这题跟poj 2406很像,只不过poj要求全部循环,而这题只要求部分就行。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
char s[1100000];
int p[1100000];
int main()
{
int n;
scanf("%d",&n);
scanf("%s",s+1);
p[1]=0;int j=0;
for(int i=2;i<=n;i++)
{
while(j>0 && s[i]!=s[j+1])j=p[j];
if(s[i]==s[j+1])j++;
p[i]=j;
}
printf("%d\n",n-p[n]);
return 0;
}