/* 思路: 对于字符串 s 从 s 的第二个字符开始与 s 的前边所有字符比较 能进行比较的条件是 s 前边的字符个数必须是 len 的约数 也就是说 len%i == 0 才能进行比较(后边的字符长度得是前边的倍数,你的代码没有加入这个条件) 详细的请看代码注释 */ #include<cstdio> #include<cstring> char s[100]; int main() { int t; scanf("%d",&t);//测试样例个数 while(t--) { memset(s,0,sizeof(s));//初始化s scanf("%s",s);//输入字符串s int len=strlen(s);//s 的长度 int flag;//一个标记,判断是否跳出循环 for(int i=1;i<=len;i++)//从 这里得写 i<=len 因为如果这个字符串的周期可能是它的长度 if(len%i==0)//如果后边的数是i的倍数,才进行比较 (len-i)%i==0 ---> len%i==0 { flag=1; for(int j=i;j<len;j++)//从 i 开始判断 长度为 i 的字符串前边的是不是相同 if(s[j]!=s[j%i]) { flag=0;//有不同的证明前 i 个字符不是周期数 break;//退出循环,继续判断 } if(flag) { printf("%d\n",i);//是周期数的话输入i .....这里得写 \n 不写会 WA 我第一次 就是这样WA的 break;//找到之后退出 } } if(t) printf("\n");//t不是0的时候在输出一个空行 } return 0; }
紫书,习题3-4求字符串的最小周期
猜你喜欢
转载自blog.csdn.net/hpuer_random/article/details/80106872
今日推荐
周排行