习题3-4 周期串(Periodic Strings, UVa455)
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例
如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例
如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。
输入一个长度不超过80的字符串,输出其最小周期。
Sample Input
1
HoHoHo
Sample Output
2
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
int factor[20]; //存储约数
int count = 0; //约数个数
void Find_Factor(int n) { //找n的约数
for(int i = 1; i <= n; i++) {
if(n%i == 0) {
count++;
factor[count] = i;
}
}
}
int main() {
int n;
cin >> n;
string line[50];
for(int i = 1;i <= n; i++) {
cin >> line[i];
}
for(int p = 1;p <= n; p++) {
string s;
s = line[p];
int len = s.length();
memset(factor, 0, sizeof(factor));
count = 0;
Find_Factor(len);
for(int i = 1; i <= count; i++) {
string ss;
string t = s.substr(0, factor[i]); //截取约数长度的字符串
for(int j = 1; j <= (len/factor[i]); j++) { //复制到和原串等长
ss += t;
}
if(s == ss) { //比较
cout << factor[i] << endl;
if(p != n) cout << endl;
break;
}
}
}
return 0;
}