题目描述
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如abcabcabcabc以3为周期(当然他也以6,12为周期)。输入一个长度不超过100000的串,输出他的最小周期。
输入
多组测试数据,每组仅一行为一个仅有大写字母组成的字符串。
输出
对于每组数据输出该字符串的最小周期。
样例输入
复制样例数据
HOHO
样例输出
2
还有其他方法,感觉更简单一些,不过都是暴力https://blog.youkuaiyun.com/weixin_43935894/article/details/89007661
#include<iostream>
using namespace std;
int main()
{
string s;
while(cin>>s)
{
for(int i=1;i<s.size();i++)
{
if(s[i]==s[0])
{
int p=i,num=1;
string s1(s,0,i);
string s2(s,p,i);
//cout<<p<<" "<<s1<<" "<<s2<<endl;
while(s1==s2 && p<s.size())
{
num++;
p+=i;
string s3(s,p,i);
s2=s3;
}
//cout<<num*i<<endl;
if(num*i==s.size())
{
printf("%d\n",i);
break;
}
}
if(i>s.size()/2)
{
printf("%d\n",s.size());
break;
}
}
}
return 0;
}