题解 CF420A 【Start Up】
jijidawang
2020-04-21 17:12:49
**注意!这题不仅仅是判回文串!而是把它翻转过来,也就是要求字母轴对称且对称轴垂直于底平面!**
## 题面简述
> 判断字符串翻过来后是不是等于原样。
## 算法分析
判回文串和轴对称字母即可。
轻易知:轴对称字母有:$\text{AHIMOTUVWXY}$ 这 $11$ 个,挨个判断是否在这 $11$ 个字母里即可。
判回文串用两个指针从左右往回走即可,一遍判回文一边判轴对称
代码:
```cpp
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string a;cin>>a;
int len=a.length();
for (int i=0;i+i<=len;i++) //遍历一半,注意奇数长度用<=
{
int j=len-i-1; //一定要减一啊啊啊
if (a[i]!='A'&&a[i]!='H'&&a[i]!='I'&&a[i]!='M'&&a[i]!='O'&&a[i]!='T'&&a[i]!='U'&&a[i]!='V'&&a[i]!='W'&&a[i]!='X'&&a[i]!='Y'){cout<<"NO";return 0;} //判前半部分的轴对称
if (a[j]!='A'&&a[j]!='H'&&a[j]!='I'&&a[j]!='M'&&a[j]!='O'&&a[j]!='T'&&a[j]!='U'&&a[j]!='V'&&a[j]!='W'&&a[j]!='X'&&a[j]!='Y'){cout<<"NO";return 0;} //判后半部分的轴对称
if (a[i]!=a[j]){cout<<"NO";return 0;} //判回文
}
cout<<"YES"; //一切满足
return 0;
}
```