题解
2024-07-13 08:47:28
发布于:上海
9阅读
0回复
0点赞
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string s;
int main(){
cin>>s;
while(s.size()>1){//循环一直到s长度为1停止,输出若无法在循环内输出,需要在循环外接着输出
if(s.size()%2){//如果是奇数那么无法通过复制得到,直接输出
cout<<s.size();
return 0;
}
//当中“一分为二”
string l=s.substr(0,s.size()/2);
string r=s.substr(s.size()/2,s.size()/2);
//右边可能是经过左边复制回文得到,逆序
reverse(r.begin(),r.end());
//判断是否相等,如否,则无法通过复制得到,直接输出
if(l!=r){
cout<<s.size();
return 0;
}
//继续一分为二查找是否还有更小的长度
else s=l;
}
cout<<s.size();//预防某些测试点输出为1,但是在循环内无法做到输出1
return 0;
}
时间复杂度:O(log2n)
预计得分:100pts
这里空空如也
有帮助,赞一个