您的位置:首页 > 其它

算法提高 周期字串

2018-03-09 22:20 197 查看
细节水题,,逻辑清楚就好,知道那部分输出,什么时候输出什么就能解决了

#include <iostream>
using namespace std;
string str;
int length;

int main()
{
cin>>str;
int flag1 = 0; //标识元素确实最后是否找到
for(int i=1;i<=str.length()/2;i++){//从1开始直到串的一半长度循环遍历可能存在的周期
int flag=0;
if(str.length()%i==0){ //查看是否能被str串的长度除尽如何可以的话就进行下面的检查操作
string substr = str.substr(0,i);
for(int j=i;j<=str.length()-i;j+=i){ //检查是否是一个周期
string substr_ = str.substr(j,i);
if(substr!=substr_){ //如果不是就退出因为没有必要接着找了,找下一个可能为周期的值并改变标识状态
flag=1;
break;
}
}
if(flag==0) //如果标识元素的状态没有发生改变的话确认这是一个可行的周期,输出这个周期
{
cout<<i;
flag1 = 1;//找到了改变标识元素的属性
break; //由于是从小到大遍历的所以直接break就可以了,只输出最小的答案
}
}
}
if(flag1==0) //没找到的话直接输出串的原长度代表最小周期
cout<<str.length();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: