解题思路:这道题也想不出来,跟着老师敲的。
通过找规律发现,若a的n次方等于str,则每一小段字符串m等于总字符串除以n。
通过这个规律对字符串从长度为1开始进行验证。验证方法为将每一小段字符串拼接n次观察是否为原字符串。
#include<iostream>
using namespace std;
int main()
{
string str;
while(cin>>str,str!=".")//每次输入读取一个字符串,直到遇到字符串"."
{
int len =str.size();
for(int n=len;n;n--)//首先获取字符串的长度(len),然后通过一个嵌套的循环来找出最小循环字符串的长度。嵌套循环的索引变量是n,从字符串长度开始递减,直到1
{
if(len%n==0)//先判断当前字符串长度len能否被索引变量n整除,如果能,则通过除法得到每个子字符串的长度m
{
int m=len/n;
string s=str.substr(0,m);//使用substr()函数获取字符串的前m个字符作为子字符串s。
string r;
for(int i=0;i<n;i++)r+=s;
if(r==str)//使用一个for循环将子字符串s重复n次,得到一个新的字符串r。如果字符串r等于原字符串str,则表示找到了一个循环字符串
{
cout<<n<<endl;程序输出当前循环字符串的长度n,并使用break跳出内部循环
break;
}
}
}
}
return 0;
}