算法1
字符串匹配,比较繁琐
C++ 代码
#include <iostream>
#include<string>
#include<cstring>
#include<sstream>
#include<algorithm>
using namespace std;
int main()
{ string s;
while(cin>>s,s!="."){
int n=0,len=0,flag=0;
for(int i=1;2*i<=s.size();i++){//i越短越好
if(s.size()%i!=0) continue;//是整数倍的才继续判断
string substr=s.substr(0,i);
//cout<<substr<<endl;
int j,k;
for(j=0,k=0;j<s.size();j++){
//cout<<substr[k]<<' ';
if(s[j]!=substr[k]) break;
k=(k+1)%substr.size();//循环遍历子串
}
if(j==s.size()){
//cout<<substr<<endl;
len=i;
n=s.size()/len;
cout<<n<<endl;
flag=1;
break;
}
}
if(flag==0) cout<<1<<endl;
}
return 0;
}
算法2
反向操作,拼接字符串
C++ 代码
#include <iostream>
using namespace std;
int main()
{
string str;
while (cin >> str, str != ".")
{
int len = str.size();
for (int n = len; n; n -- )
if (len % n == 0)
{
int m = len / n;
string s = str.substr(0, m);
string r;
for (int i = 0; i < n; i ++ ) r += s;
if (r == str)
{
cout << n << endl;
break;
}
}
}
return 0;
}