题目链接:点击进入
其实就是KMP算法next数组的简单应用。如果我们设这个字符串的最小周期为x 长度为len,那么由next数组的意义,我们知道len-next[len]的值就会等于x。这就是这个题目的关键点。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000000+100;
char str[maxn];
int next[maxn];
int kmp_next(char x[],int m,int next[])
{
int i,j;
j=next[0]=-1;
i=0;
while(i<m)
{
while(-1!=j&&x[i]!=x[j])
j=next[j];
next[++i]=++j; ///next函数从第一位开始算
}
if(m%(m-next[m])==0)
return m/(m-next[m]);
return 1;
}
int main()
{
///freopen("in.txt","r",stdin);
while(scanf("%s",str))
{
if(str[0]=='.')
break;
printf("%d\n",kmp_next(str,strlen(str),next));
}
return 0;
}