1. 问题描述
给定一个长度为n的字符串S,如果存在一个字符串T,重复若干次T能够得到S,那么,S叫做周期串,T叫做S
的一个周期。如:字符串abababab是周期串,abab、ab都是它的周期,其中,ab是它的最小周期。设计一个算法,
计算S的最小周期。
2. 问题分析
首先我们会很容易想到最简单的暴力求解:假设字符串S的长度为 len,S的最小周期的长度为 i ,字符串S表示
为S[0…len-1]。
① 我们遍历 i 从1到 len/2 (只需要遍历到 len/2 即可,因为最小周期的长度不可能超过字符串S长度的一半),若len %
i == 0,i 便有可能是最小周期的长度,具体是不是还需要进行判断。
② 判断 i 是不是最小周期的长度,要将字符串S后面的 len – i 个字符中每 i 个字符分成的各组字符分别与前 i 个字符
进行比较,即将 S[i…2i-1],S[2i…3i-1],……,S[len-i…len-1] 各个分组的每个字符分别与 S[0…i-1] 中的每个字符进
行比较。更简洁一点,省去分组的麻烦,直接将 S[i…len-1] 的每个字符 S[j] (j = i,…,len-1) 分别与 S[j % i] 进行比较即