本文共 846 字,大约阅读时间需要 2 分钟。
题目意思:
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期(注意6,12也为周期 ),求的是最小周期。
实现:
#include#include #define maxn 100000int 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; }
转载地址:http://oaimi.baihongyu.com/