题目
如果一个字符串可以由某个长度为K的字符串重复多次得到,我们说该串以K为周期,例如:
abcabcabcabc以3为周期(注意,它也以6和12为周期)。输入一个长度不超过80的串,输出它的最小周期
举例:输入:hoahoahoa
输出: 3
思路
思路其实已经体现在题目中了,假设一个周期,然后满足的条件是周期肯定被串长度整除,然后从最小的开始遍历,其中遍历时满足后面每个周期里的数都和第一个周期相同,就输出该周期,该周期肯定是最小的。仔细看代码就知道了 = =
代码
#include <iostream>
using namespace std;
int main(){
char word[81];
cin>>word;
int len = strlen(word);
//cout<<len<<endl;
for(int i=1;i<=len;i++){ //周期起码为1,所以从1开始
int ok=1; //ok表示周期是否成立
if(len%i==0){
//cout<<"i "<<i<<endl;
for(int j=i;j<len;j++){
if(word[j]!=word[j%i]) {ok=0;break; }
}
if(ok){ cout<<i<<endl; return 0;}
}
}
}
happy coding
seen