一个字符串可由某个长度为k的字符串重复多次得到,现在我们输入这样一个串,求其最小的k
具体思想是先假设周期,然后遍历整个字符串,发现不符合周期的就进入下一轮循环
//习题3-4
#include <iostream>
#include <string>
using namespace std;
int cal(const string& str) {
//T代表周期
for (int T = 1; T <= str.length(); T++) {
//剪枝,长度与周期一定有因数
if (str.length() % T != 0)
continue;
//标记是否最小正周期
bool flag = true;
for (int i = 0 ; i < str.length(); i++) { // 这里的i不能等于length...因为这个bug改了半天
if (str[i % T] != str[i]) { //最重要的一步
flag = false;
break;
}
}
if (flag)
return T;
}
}
int main(void) {
string s;
while (cin >> s) {
cout << cal(s) << endl;
}
}