题目描述
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如abcabcabcabc以3为周期(当然他也以6,12为周期)。输入一个长度不超过100000的串,输出他的最小周期。
输入
多组测试数据,每组仅一行为一个仅有大写字母组成的字符串。
输出
对于每组数据输出该字符串的最小周期。
样例输入
复制样例数据
HOHO
样例输出
2
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
string str;
string flag;
char ch[100005];
int solve(int x)
{
long long sum=x-1;
string mid=str.substr(0,x);
while(sum<str.size()-1)
{
flag=str.substr(sum+1,x);
if(flag!=mid)
{
return sum+1;
}
sum+=x;
}
return -2;
}
int main()
{
while(~scanf("%s",ch))
{
long long ans=0;
str=ch;
for(int i=1; i<=str.size(); i++)
{
ans=solve(i);
if(ans==-2)
{
cout<<i<<endl;
break;
}
i=ans;
}
getchar();
}
return 0;
}