文章
14
粉丝
230
获赞
122
访问
81.7k
 
思路:
带注释代码
#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");
}
登录后发布评论
暂无评论,来抢沙发