小蓝最近迷上了回文字符串,他有一个只包含小写字母的字符串 S,小蓝可以往字符串S的开头处加入任意数目个指定字符:1、q、b(ASCII码分別为:108、113、98)。小蓝想要知道他是否能通过这种方式把字符串S转化为一个回文字符串。
输入格式
输入的第一行包含一个整数T,表示每次输入包含T组数据
接下来依次描述 T组数据。
每组数据一行包含一个字符串S。
输出格式
输出T行,每行包含一个字符串,依次表示每组数据的答案。如果可以将S转化为一个回文字符串输出 Yes,否则输出No。
样例输入
gmgqlq
pdlb11
aaa
样例输出
Yes
No
Yes
#include <iostream>
#include<string.h>
using namespace std;
//判断是否为回文字符串
bool is_palindrome(char* str, int start, int end) {
while (start < end) {
if (str[start] != str[end]) {
return false;
}
start++;
end--;
}
return true;
}
int main()
{
int T;
cin >> T;
for (int i = 0; i < T; i++) {
char s[1000005];
cin >> s;
int len = strlen(s);
int start = 0, end = len - 1;
//从左到右
while (start < len && (s[start] == 'l' || s[start] == 'q' || s[start] == 'b')) {
start++;
}
//从右到左
while (end >= 0 && (s[end] == 'l' || s[end] == 'q' || s[end] == 'b')) {
end--;
}
if (start >= end || is_palindrome(s, start, end))
cout << "Yes" << "\n";
else
cout << "No" << "\n";
}
return 0;
}