该题的数据量小,直接暴力枚举:依次枚举循环节的长度,进行测试
//我自己写的,比较麻烦,虽然也AC了
#include<iostream>
#include<string.h>
using namespace std;
char str[100];
int main(void)
{
int N, len, period;
bool flag;
cin >> N;
while (N--)
{
cin >> str;
len = strlen(str);
for (int i = 1; i <= len; i++)
{
flag = true;
if (len%i == 0)
{
if (len / i == 1)
{
period = len;
}
else
{
//下面对该字符串中每两个相邻“子串”都进行相互比较
for (int k = 1; (k <= len / i - 1) && flag; k++)
{
for (int j = k*i - i; (j < k*i) && flag; j++)
{
if (str[j] != str[j + i])
{
flag = false;
break;
}
}
}
if (flag) period = i;
}
if (flag)
{
cout << period << endl;
break;
}
}
}
if (N) cout << endl;
}
return 0;
}
//参考别人的代码改进的
#include<iostream>
#include<string.h>
using namespace std;
char str[100];
int main(void)
{
int N;
cin >> N;
while (N--)
{
cin >> str;
int len = strlen(str);
for (int i = 1; i <= len; ++i)
{
if (len%i == 0)
{
int j;
for (j = i; j < len; ++j)
{
//利用周期性~j%i回到第一个周期的串
//将后面的串,循环与第一个周期的串的各个字母比较
if (str[j] != str[j%i]) break;
}
if (j == len)
{
cout << i << endl;
break;
}
}
}
if (N) cout << endl;
}
return 0;
}