CF420A Start Up 题解
Content
给定一个长度为 \(n\) 的字符串,求这个字符串整个反转过来后是否和原字符串一样。
数据范围:\(1\leqslant n\leqslant 10^5\)。
Solution
众所周知,反转过来后一模一样的大写字母仅有以下这些:
\(\texttt{AHIMOTUVWXY}\)
所以这就相当于在判断回文串的基础上再判断是否是以上这些字符,直接开个左节点和右节点,往中间边遍历边判断即可。
Code
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
string a;
int main() {
cin >> a;
int len = a.size();
for(int i = 0, j = len - 1; i <= j; ++i, --j)
if(!(a[i] == a[j] && (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')))
return printf("NO"), 0;
return printf("YES"), 0;
}