题目:求解字符串的最小重复周期,如:abcabcabc的最小重复周期是3(它同样以6,12为周期)。输入一个长度不超过80的字符串,输出最小周期。
思路:通过从1开始枚举周期,找到最小周期。
已通过vj测试!
#include<iostream>
#include<string.h>
using namespace std;
#define maxn 85
char s[maxn];
int main()
{
int n;
cin >> n;
while (n--)
{
int flag;
cin >> s;
for (int k = 1;; k++) //枚举周期,找到最小周期
{
flag = 1;
for (int i = 0; i+k < strlen(s); i++)
if (s[i] != s[i + k] || strlen(s) %k != 0) //长度应为周期倍数
{
flag = 0;
break;
}
if (flag == 0)
continue;
if (n != 0) //注意输出格式
{
cout << k << endl << endl;
break;
}
else
{
cout << k << endl;
break;
}
}
}
return 0;
}
容易出错的几点:
1、对于是否满足为周期的判断,除了间隔相邻周期的元素要相等之外,还要保证字符串长度为周期的倍数,否则会出现ababa的周期给出2的判断。
2、输出格式除最后一个数据外,要有两次换行。
望指正!