《算法竞赛入门经典》5.13周期串

Posted 你有多努力,就有多幸运!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《算法竞赛入门经典》5.13周期串相关的知识,希望对你有一定的参考价值。

 1 /*
 2 *如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。
 3 *输入一个长度不超过80的串,输出它的最小周期。
 4 *样例输入:HoHoHo
 5 *样例输出:2
 6 */
 7 #include <stdio.h>
 8 #include <string.h>
 9 
10 //枚举法
11 int main()
12 {
13     char word[100];
14     scanf("%s", word);
15     int len = strlen(word);
16     for(int i = 1; i <= len; ++i)             //遍历各种可能出现周期1,2,3,4...len
17     {
18         int ok = 1;                            //检测字符串是否具有周期性,1表示真
19         //从周期长度的下一个位置开始与前面周期子串中的字符逐个比较,若出现一个不相等字符,则这个串长到此结束(跳出内循环)
20         for(int j = i; j < len; ++j)
21             if(word[j] != word[j % i]) {ok = 0; break; }
22         if(ok) {printf("%d\n", i); break; } //找到周期立刻结束(跳出外循环)
23     }
24     return 0;
25 }
26 /*分析:
27 *1.len为字符串长度,strlen()不包括最后的空字符;
28 *2.i记录周期长度,j记录从第二个周期开始字符的位置;
29 *3.语法:临时定义变量,不属于ANSI C,扩展名保存为.cpp;
30 *4.内循环判断:例如j=4的时候j%i=0,所以word[0]必须要和word[4]相等,以此类推word[1]=word[5],word[2]=word[6]...word[j]!=word[i%j]
31 *  得出一个周期,然后执行下次循环计算下一个周期。
32 */

 

以上是关于《算法竞赛入门经典》5.13周期串的主要内容,如果未能解决你的问题,请参考以下文章

算法竞赛入门经典 例题 3-4 回文串

《算法竞赛入门经典》3.3最长回文子串

算法竞赛入门经典_4.3_递归

《算法竞赛入门经典(第2版)》pdf下载在线阅读,求百度网盘云资源

算法竞赛入门经典——训练指南

算法竞赛入门经典训练指南pdf高清版免费下载