文章
14
粉丝
230
获赞
26
访问
71.2k
思路:
带注释代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str;
cin>>str;
int flag=0;
int len = str.length();
for(int i=0; i<len; i++) //将非空结点全部转换为t,只区分空节点和非空结点(注:这个方法借鉴学习了csYfZhang的题解)
if(str[i]!='#')
str[i]='t';
int index=0,t=1;
string temp1,temp2;
while(index+t<=len)
{
temp1=str.substr(index,t);//提取该层的字符串
temp2=temp1;
reverse(temp1.begin(),temp1.end());//倒转比较
if(temp1!=temp2) //不等,说明不对称
{
flag=1;
break;
}
index+=t; //更新index t的值
t=t*2;
}
if(flag==1) puts("NO");
else puts("YES");
}
登录后发布评论
暂无评论,来抢沙发