题目意思:
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期(注意6,12也为周期 ),求的是最小周期。
实现:
#include<stdio.h>
#include<string.h>
#define maxn 100000
int main()
{
char s[maxn];
int n, i;
int ok;
// freopen("C:\\Users\\zhangwei\\Desktop\\input.txt","r",stdin);
// freopen("C:\\Users\\zhangwei\\Desktop\\output.txt","w",stdout);
scanf("%d",&n);
while(n--){
getchar();//这个最好加上 防止换行符 不过没加的时候也AC了
scanf("%s",&s);
int len = strlen(s);
for(i = 1; i <= len; i++ ){//i表示周期 要可以取到 len(注意)
ok = 1; //循环开始 置为1
if(len % i == 0){//首先要满足 周期能被 字符串长度整除 不然失去意义了
for(int j = 0; j < len; j++ ){//这里是扫描字符(不可以取到len 因为数组越界)
if(s[j] != s[j%i]){// 核心
ok = 0;
break;
}
}
if(ok)//目的找到最小的周期 就退出循环
break;
}
}
if(ok){//题目要求Outpu 空一个空行
printf("%d\n",i);
if(n)//最后一个 不能 有空行
printf("\n");
}
}
return 0;
}