第5讲6
//*范例
#include <iostream>
using namespace std;
int main()
{
string str;
while(cin >> str, str != ".")
{
int len = str.size(); //求出字符串长度len n为片段数量 m为片段长度
for (int n = len; n; n--)
{
if(len % n == 0) //n一定是len的约数
{
int m = len / n;
string s = str.substr(0, m);
string r;
for(int i = 0; i < n; i++) r += s;
//假设成立,那么就以第一段长度为m的字符串重复n次拼起来,那么拼起来的r应该等于str
if(r == str)
{
cout << n << endl;//输出片段输量(重复次数)
break;
}
}
}
}
return 0;
}
//我的做法
#include <iostream>
using namespace std;
int main()
{
string str;
while(cin >> str, str != ".")
{
int len = str.size();
for (int i = 1; i <= len; i++)
{
int j = i;
for(j; j < len; j++)
{
if(str.substr(0,i) == str.substr(j,i)) j=j+i-1;
else break;
}
if (j == len)
{
cout << str.size()/i <<endl;
break;
}
}
}
return 0;
}
//我的思路:
//假如ababab
//第一次循环:设a为基本片段 下一个是b 不满足
//第二次循环:设ab为基本片段 下一个是ab 再下一个还是ab 成立
//n = 字符串总长度 除以 片段长度