算法1
思路:先用len保存字符串长度,然后len%n,这是关键,找出最长公共前后缀,m用来记录长度,
s用来保存最长公共前后缀,再用循环相乘,比较一下是否与原字符串相同
这个题有些难,第一次看到这个题想到了KMP,求公共最长前后缀问题
C++ 代码
#include<iostream>
using namespace std;
int main(){
string str;
while(cin>>str,str!="."){
int len=str.size();//这个题有点难,先求出字符串长度
for(int n=len;;n--){
if(len%n==0){//找出最长公共前后坠
int m=len/n;//m用来记录长度
string s=str.substr(0,m);//s用来保存最长公共前后缀
string r;
for(int i=0;i<n;i++) r+=s;//再用循环相乘
if(r==str){//比较一下是否与原字符串相同
cout<<n<<endl;
break;
}
}
}
}
return 0;
}