题目链接:http://acm.hust.edu.cn/problem/show/1010
求循环节裸题
#include <stdio.h>
#include<cstring>
using namespace std;
char b[1000010];
int nxt[1000010];
int lb;
void gnx(){
nxt[0]=-1;
int i=0,j=-1;
while(i<lb){
if(j==-1||b[i]==b[j])nxt[++i]=++j;
else j=nxt[j];
}
}
int main(void)
{
while(~scanf("%s",b)){
lb=strlen(b);
gnx();
printf("%d\n",lb-nxt[lb]);
}
return 0;
}