周期串(UVa455)
1.问题描述
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为最小周期(注意,它也以6和12为周期)。 输入t个字符串,每个字符串不超过80个字符,输出其最小周期。
2.代码展示
#include<cstdio>
#include<cstring>
#define maxn 85
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
char s[maxn];
scanf("%s",s);
int l=strlen(s);
for(int i=1;i<=l;i++)
{
int k;
if(l%i==0) //枚举周期
{
for( k=i;k<l;k++)
{
if(s[k]!=s[k%i]) //说明它的周期不是i,跳出循环
break;
}
if(k==l)
{
printf("%s以%d为周期\n",s,i);
break; //找到最小周期就跳出,防止它继续找
}
}
}
printf("\n");
}
return 0;
}