Description
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如abcabcabcabc以3为周期(当然他也以6,12为周期)。输入一个长度不超过80的串,输出他的最小周期。
Input
多组测试数据,每组仅一行为一个仅有大写字母组成的字符串。
Output
对于每组数据输出该字符串的最小周期。
Sample Input
HOHO
Sample Output
2
Source
首先分析,既然是周期,那么肯定能够是字符长度(t)的一个因数,从1到t/2依次枚举,判断第一个周期与之后的所有周期是否相同,大于t/2的话就直接输出长度(t)。
AC代码:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
char a[1005];
int sum,ok,t;
while(cin>>a)
{
t=strlen(a);
sum=0;
for(int i=1;i<=t/2;i++)
{
ok=1;
if(t%i==0) //周期必是数组长度的因数;
{
for(int j=0;j<i;j++) //从第一个周期开始枚举
{
for(int m=1;m<t/i;m++)
{
if(a[j]!=a[j+m*i])
{
ok=0;
break;
}
}
if(!ok)
{
break;
}
}
if(ok)
{
sum=i;
break;
}
}
}
if(sum==0)
{
cout<<t<<endl;
}
else
{
cout<<sum<<endl;
}
}
return 0;
}