周期字串
问题描述
右右喜欢听故事,但是右右的妈妈总是讲一些“从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲的什么呢?从前有座山……”这样循环的故事来搪塞右右。
我们定义,如果一个字符串是以一个或者一个以上的长度为k的重复字符串所连接成的,那么这个字符串就叫做周期为k的串。
例如:
字符串’abcabcabcabc’周期为3,因为它是由4个循环’abc’组成的。它同样是以6为周期(两个重复的’abcabc’)和以12为周期(一个循环’abcabcabcabc’)。
右右现在想给他的朋友大灰狼转述妈妈讲的故事,请帮他写一个程序,可以测定一个字符串的最小周期。
输入格式:
一个最大长度为100的无空格的字符串
输出格式:
一个整数,表示输入的字符串的最小周期
#include<stdio.h>
int main(){
int i,j,flag,len;
char a[100]; //定义长度为100的字符串数
scanf("%s",a);
for(len=0;a[len]!='\0';len++); //计算字符串的长度
for(i=1;i<=len;i++){
flag=1; //用flag作为标记
if(len%i==0)//若此时i是周期,其与长度的余数必为0
{
for(j=i;j<len;j++)
if(a[j%i]!=a[j]){ //此处假设i已经是字串的周期,通过循环判断第一个字符与下一个周期的第一字符是否相等,在循环条件下依次类推至后边元素
flag=0; //如果周期内对应元素不相等,则标记符flag=0;退出循环
break; //满足a[j%i]!=a[j]的话,退出小循环,执行大循环
}
if(flag==1){ //如果flag=1,说明上面那个小循环符合条件并且完成循环,此时便可判定i是最小周期
printf("%d",i);
break;
}
}
}
return 0;
}