周期串
Time Limit:1000MS Memory Limit:65536K
Total Submit:65 Accepted:20
Description
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为同期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。
Input
连续输入一个长度不超过80的字符串。
Output
输出它的最小周期并换行。
Sample Input
HoHoHo
HelloHello
Sample Output
2
5
Source
[Submit] [Go Back] [Status] [Discuss]
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
int i;
while(cin>>a)
{
for(i=1; i<=a.size(); i++)
{
if(a.size()%i!=0)continue;//非要有这句,貌似才行,WRONG了还几次
bool flag=true;
for(int j=i; j<a.size(); j++)
{
if(a[j]!=a[j%i])
{
flag=false;
break;
}
}
if(flag)
{
cout<<i<<endl;
break;
}
}
}
return 0;
}
//AC
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
int cycle; //周期
while(cin>>s)
{
int len=s.length();
for(cycle=1; cycle<=len; cycle++) //枚举周期
{
if(len%cycle!=0) continue; //不整除,继续下次枚举
int ok=1; //标记
for(int j=cycle; j<len; j++)
{
if(s[j]!=s[j%cycle])
{
ok=0; //判定
break;
}
}
if(ok)
{
cout<<cycle<<endl;
break;
}
}
}
return 0;
}