题目描述
感觉我的好好理解;
用双指针找到下一个与s[0]相同的字符记为s[j]
然后将s[0]到s[j-1]与其长度为一个周期,那这段的字符串乘上他的周期得到的新字符串与原字符串进行对比
如果相同则输出如果不同则继续j++直到找到为止
如果j都加到s.size()-1都没有结果,那么情况为abcd或者aaca形式,用一个else解决问题
样例
blablabla
算法1
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
14ms
参考文献
C++ 代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
while(cin>>s,s!=".")
{
int n,i=0,j=i;
while(j<s.size())
{
j++;
if(s[j]!=s[i]&&j!=s.size()-1) continue;
if(s[j]==s[i]&&j!=s.size()-1)
{
int a=s.size()%(j-i);
if(a==0) n=s.size()/(j-i);
string subs,subss;
for(int m=i;m<=j-1;m++)
subs+=s[m];
for(int l=1;l<=n;l++)
subss+=subs;
if(subss==s) break;
else continue;
}
else n=1;
}
cout<<n<<endl;
}
return 0;
}
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla