枚举即可,通俗易懂0.0
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str;
while (cin >> str && str != ".")
{
for (int i = 1; i <= str.size(); i++) //i是字符串a的可能位数(s=a^n)
{
int cnt = str.size() % i;
if (!cnt) //a的位数一定是字符串s长度的约数
{
int n = str.size() / i; //n是拼接的次数
string a;
for (int j = 0; j < i; j++) a += str[j]; //得到a
string s;
for (int k = 0; k < n; k++) s += a; //检查a重复拼接n次后得到的串s是否是str
if (s == str) //n是从大到小枚举的,因此找到的第一个符合条件的n一定是最大的,直接输出即可
{
cout << n << endl;
break;
}
}
}
}
return 0;
}
算法1
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla