您的位置:首页 > 编程语言 > C语言/C++

算法竞赛入门经典-习题3-4 周期串(Periodic Strings, UVa455)

2017-06-03 10:05 351 查看
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。 例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。

输入一个长度不超过80的字符串,输出其最小周期。

#include<stdio.h>

#include<string.h>

int main()

{
int k = 1;
char s[100];
scanf("%s",s);
int len = strlen(s);
int flag = 0;
//没找到k时
for(k = 1; k <= len &&  flag == 0; k++)         
{
if(len % k != 0)
//满足k整除len

continue;

flag = 1;
//假设此时k是周期
for(int i = 1; i < (len / k); i++)
//分成len/k个小段,验证每个小段是否相同
{
                    
for(int j = 0; j < k; j++)
//在每小段中逐位验证
{
if(s[i*k+j] != s[j])
{
flag = 0;
//此时k不是周期,不必再检查其他位
break;
}
}
if(!flag)
//此时k不是周期,不必再检查其他段
break;
}

 
}
printf("%d\n",k-1);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息