有一类题目:一个字符串可以由某个长度为k的字符串重复多次得到,该串以k为周期。例如,abcabcabcabc以3为周期,也以6和12为周期,那么如何求它的最小周期?
求解这一类的周期性的题目,有个关键:周长一定可以被串长整除,故我们无需判断所有的i-len,只需要判断能被len整除的i;其次,我们的i从小开始遍历,即for(int i=0; i<len; i++)一定得到满足条件的i,就一定是最小周期,直接break出来。
还有一个模板,当我们需要逐一比较两个周期的字符串是否相同时,可以用如下代码:
for (int j=i; j<len; j++)
if(word[j]!=word[j%i]) //核心语句
{
ok=0;
break;
}