一.题目
如果一个字符可以由某个长度为k的字符串重复多次得到,则称该字符串以k为周期。例如,abcabcabc以3为周期(注意,他也以6和12为周期)
input
hohoho
output
2
二.思路
最小周期,从1开始找,找到可以满足就退出,找不到就输出字符串的长度。
三.代码
#include <stdio.h>
#include<string.h>
char s[100000];
int main ()
{
int i;
int lens;
gets(s);
lens= strlen(s);
i=1;
int flag = 0;
while(i<lens) //有周期的 最小周期数一定小于该长度
{
int j=0;
for(j=0;j<lens-i;j++) //按a[n] == a[n+T] 的思路来写循环
{
if(s[j]!=s[j+i])
{
break; //不符合,立刻break出来
}
if(j==lens-i-1)
{
flag = 1; //如果可以测试出一个周期,就标志起来
}
}
if(flag == 1)
{
printf("%d",i);
break;
}
i++;
}
if(i==lens) printf("%d",i); //如果没找到周期,就输出当前长度
return 0;
}