问题描述
小蓝最近迷上了回文字符串,他有一个只包含小写字母的字符串 SS,小蓝可以往字符串 SS 的开头处加入任意数目个指定字符: l、q、bl、q、b(ASCIIASCII 码分别为: 108、113、98108、113、98)。小蓝想要知道他是否能通过这种方式把字符串 SS 转化为一个回文字符串。
输入格式
输入的第一行包含一个整数 TT,表示每次输入包含 TT 组数据。
接下来依次描述 TT 组数据。
每组数据一行包含一个字符串 SS 。
输出格式
输出 TT 行,每行包含一个字符串,依次表示每组数据的答案。如果可以将 SS 转化为一个回文字符串输出 Yes
,否则输出 No
。
#include <iostream>
#include <string>
using namespace std;
int main() {
int a;
cin >> a;
while (a--) {
string s, filtered;
cin >> s;
// 过滤掉 'l', 'q', 'b' 字符
for (char c : s) {
if (c != 'l' && c != 'q' && c != 'b') {
filtered += c;
}
}
// 判断过滤后的字符串是否是回文
bool isPalindrome = true;
int n = filtered.size();
for (int i = 0; i < n / 2; i++) {
if (filtered[i] != filtered[n - 1 - i]) {
isPalindrome = false;
break;
}
}
cout << (isPalindrome ? "Yes" : "No") << endl;
}
return 0;
}