【题目描述】
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例
如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。
输入一个长度不超过80的字符串(不含空格),输出其最小周期。
输入第一行表示有T组数据,后续是T行字符串。输出的每组数据间要有一个空行。
【样例输入】
1
HoHoHo
【样例输出】
2
【题目来源】
刘汝佳《算法竞赛入门经典 第2版》习题3-4 周期串(Periodic Strings, UVa455)
【解析】
因为求的是最小周期k,只需让k从1遍历到字符串的长度len,依次判断k是否是字符串s的周期。
一、老金的算法:纵向扫描
本题的关键是判断k是否是字符串的周期,这就要从第2个周期开始将每个周期中的字符与第1个周期逐一比较,判断是否相等。遍历的方式有两种:
感受到神的指引,老金选择的是第二种(说实话也分不清哪种效率更高)。首先依次遍历第1个周期内的k个字符s[i](i=0~k-1),然后按纵向扫描的方式让后面每个周期内的对应的字符都与第1个周期内的字符一一比较,但凡遇到一个不