回文字符串

小蓝最近迷上了回文字符串,他有一个只包含小写字母的字符串 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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值