题目链接:https://vjudge.net/problem/POJ-2406
利用next数组寻找字符串循环节
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1000000+10;
char b[N];
int next0[N];
void find_next()
{
int len=strlen(b);
int k=-1;
next0[0]=-1;
int j=0;
while(j<len)
{
if(k==-1||b[j]==b[k])
{
j++;
k++;
next0[j]=k;
}
else
{
k=next0[k];
}
}
}
int main()
{
while(~scanf("%s",b))
{
if(b[0]=='.') break;
find_next();
int ans=0,len=strlen(b);
int t=len-next0[len];
if(len%t==0) ans=len/t;
else ans=1;
printf("%d\n",ans);
}
return 0;
}