//poj 2406 求字符串的最小循环节,输出重复次数
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<string.h>
#define maxn 5000000
using namespace std;
int next[maxn];
char s[maxn];
//研究getnext函数的原理。暂时理解不出来。
void getnext()
{
int len=strlen(s);
int i=0;int j=-1;
next[0]=-1;
while(i<len)
{
if(s[i]==s[j] || j==-1)
{
i++;
j++;
next[i]=j;
}
else
{
j=next[j];
}
}
}
int main()
{
while(scanf("%s",s)!=EOF)
{
if(s[0]=='.')
break;
getnext();
int len=strlen(s);
if(len%(len-next[len])==0)
printf("%d\n",len/(len-next[len]));
else
printf("%d\n",1);
}
}
POJ 2406 KMP
最新推荐文章于 2021-10-04 20:37:54 发布