UVa 455 Periodic Strings(周期串)

来源:互联网 发布:淘宝行业分析软件 编辑:程序博客网 时间:2024/04/30 14:41

UVa 455 Periodic Strings(周期串)
UVa题目链接
题目名称:周期串
题目描述:
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期,例如,abcabcabcabc以3为周期(注意它以6和12为周期)
输入一个长度不超过80的字符串,输出其最小的周期。
题目分析:
题目需要找最小的周期,现在假设我们有一个很长的字符串n,周期的可能性为1到n,所以我们可以采用一个for循环将周期从1枚举到n如果满足条件,这直接break跳出循环,输出i,反之则继续。这样就无形中满足了最小这个要求。
满足周期性需要的条件:
①字符串的个数能整除周期;
②第二周期要和第一周期的相等s[j] = s[j%i]
学习笔记:
这道题一定要注意考虑周期为1的情况,还有一个需要注意的是怎么去写这个双循环,注意这种形式,遍历问题,且周期要满足两个条件,我们可以这么考虑,不满足这两个条件之一,直接跳出,否则就全部满足了,直接输出了。

================================================================================
参考代码:

//.c#include <stdio.h>#include <string.h>#define maxn 80 + 20int main(){    char s[maxn];    int T = 0,flag = 1;    scanf("%s", s);    int len = strlen(s);    for(int T = 1; T <= len; T++)    {        for(int j = T; j <= len; j++) //第二个周期的字符串首字符时是s[T]        {            if((len % T != 0) || (s[j] != s[j%T])) break;                printf("%d\n", T);                return 0;        }    }    printf("%d\n", 1);    return 0;}
0 0