小猴编程周赛C++ | 2022年秋第12周T2回文串构造

学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!

附上汇总贴:小猴编程C++ | 汇总-CSDN博客


【题目描述】
回文字符串是一个正读和反读都一样的字符串,比如 “ l e v e l level level”、“ n o o n noon noon” 都是回文串,而 “ a b c a abca abca”、“ T x t Txt Txt” 不是回文串。
给定一个字符串 s s s,请问能否添加或删除一个字符之后使得 s s s 是一个回文字符串,注意必须进行一次删除或者添加操作,不能不做任何操作。
现在小猴手里有 q q q个字符串 s s s,需要你帮助小猴判断这些字符串中那些字符串能够通过添加或删除一个字符之后变为回文串。
【输入】
第一行,包含一个整数 q q q
接下来 q q q 行,每行包含一个字符串 s s s,保证 s s s 中只包含大小写字母和数字。
【输出】
q q q 行,第 i i i行输出一个结果,如果第 i i i 个字符串 s i s_i si 可以通过修改变为回文串,输出 Y e s Yes Yes,否则输出 N o No No
【输入样例】

2
Tom
java

【输出样例】

No
Yes

【代码详解】
[图片]

#include <bits/stdc++.h>
using namespace std;
bool isPal(string s)
{
    for (int i=0; i<s.size()/2; i++) {
        if (s[i]!=s[s.size()-i-1]) {
            return false;
        }
    }
    return true;
}
int main()
{
    int q;
    cin >> q;
    while (q--) {  // 遍历q次询问
        string s;
        cin >> s;
        int n = s.size(), i;  // 获取字符串长度n
        for (i=0; i<n/2; i++) {  // 先找到第一个不相同的位置,可以处理前一个或者后一个
            if (s[i]!=s[n-i-1]) break;
        }
        if (i==n/2 || isPal(s.substr(i,n-2*i-1)) || (isPal(s.substr(i+1,n-2*i-1)))) {  // 开始就是回文或者删除后1个后变成回文或者删除前1个后变成回文
            cout << "Yes" << endl;
        }else {  // 否则
            cout << "No" << endl;
        }
    }
    return 0;
}

【运行结果】

2
Tom
No
java
Yes
  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值