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