Period Strings UVa 455
题目:A character string is said to have period k if it can be formed by concatenating one or more repetitions
of another string of length k. For example, the string ”abcabcabcabc” has period 3, since it is formed
by 4 repetitions of the string ”abc”. It also has periods 6 (two repetitions of ”abcabc”) and 12 (one
repetition of ”abcabcabcabc”).
Write a program to read a character string and determine its smallest period.
大意:
思路:字符串长度一定是最小周期倍数——最小周期长度必定能被字符串长度整除,对于最小周期字符串,每位都能对应其后周期字串的每一位。
Sample Input
1
HoHoHo
Sample Output
2
#include <bits/stdc++.h>
#define maxn 85
using namespace std;
int main(){
int n, ok;
scanf("%d", &n);
while(n--) {
char s[maxn];
memset(s, 0, sizeof(s));
scanf("%s", s);
int len = strlen(s);
for(int i = 1; i <= len; i++) {
if(len % i == 0) { //字符串的长度一定是周期倍数
ok = 1;
for(int j = i; j < len; j++) {
if(s[j] != s[j%i]) {
ok = 0;
break;
}
}
if(ok) {
printf("%d\n", i);
break;
}
}
}
}
return 0;
}