当前位置: 首页 > news >正文

蓝桥杯P19718-回文字符串 题解

回文字符串

题目来源:7.回文字符串 - 蓝桥云课

题目描述

输入一个字符串后,在开头加入 lqb 三个指定字符。判断处理后的字符串是否为回文字符串。

输入格式:

  • 第一行输入一个整数 n,表示接下来有 n 个字符串需要判断。
  • 接下来的 n 行,每行一个字符串。

输出格式:

  • 对每个字符串输出一行,如果是回文字符串输出 Yes,否则输出 No

示例:

输入:
3
aba
xyz
racecar

输出:
Yes
No
Yes

解题思路

  1. 题目理解:

    • 回文字符串是指正读和反读都相同的字符串,例如 "aba""racecar"
    • 题目要求在输入字符串开头加入 lqb,但提供的代码中并未体现这一点,可能是题目描述或代码实现存在歧义。
    • 代码的实际逻辑是:输入字符串后,先判断是否为回文,如果不是,则尝试从末尾删除字符 lqb,再判断是否为回文。
  2. 实现步骤:

    • 对于每个输入的字符串:
      1. 先直接判断是否为回文。
      2. 如果不是回文,从字符串末尾开始检查,如果遇到 lgb,则删除该字符,并再次判断是否为回文。
      3. 输出结果:是回文输出 Yes,不是输出 No

完善后的代码

以下是修正并补充注释后的代码:

#include<iostream>
#include<string>
using namespace std;

// 判断是否为回文字符串
bool isHuiWen(string s) {
    int n = s.size();
    for(int i = 0; i < n / 2; i++) {
        if(s[i] != s[n - 1 - i]) {
            return false;  // 如果对称位置字符不相等,不是回文
        }
    }
    return true;  // 全部对称相等,是回文
} 

int main() {
    ios::sync_with_stdio(0);  // 加速输入输出
    cin.tie(0); 
    cout.tie(0);
    
    int n;
    cin >> n;  // 输入字符串数量
    string s;
    for(int i = 0; i < n; i++) {
        cin >> s;  // 输入当前字符串  
        if(!isHuiWen(s)) {  // 如果不是回文,尝试从末尾删除 l、g、b
            for(int j = s.length() - 1; j >= 0; j--) {
                if(s[j] == 'l' || s[j] == 'q' || s[j] == 'b') {  
                    s.erase(j, 1);  // 删除末尾的 l、q、b
                    if(isHuiWen(s)) break;  // 删除后若成为回文,跳出循环
                } else {
                    break;  // 遇到非 l、q、b 字符,停止删除
                }
            }
        }
        
        // 输出结果
        if(isHuiWen(s)) cout << "Yes" << endl;
        else cout << "No" << endl;
    }
    
    return 0;
}

代码分析

  1. 函数 isHuiWen

    • 输入一个字符串,检查其是否为回文。
    • 使用双指针思想,从两端向中间比较字符,若发现不相等则返回 false
  2. 主函数逻辑:

    • 使用 n 控制循环次数,逐个处理输入的字符串。
    • 对于每个字符串,先调用 isHuiWen 判断。
    • 如果不是回文,从末尾开始遍历,删除 lqb 并再次判断。
    • 优化:如果遇到非 lqb 的字符,立即停止删除,避免无意义的遍历。
  3. 输入输出优化:

    • ios::sync_with_stdio(0)cin.tie(0) 用于加速 C++ 的输入输出,适用于大规模数据。

时间复杂度与空间复杂度

  • 时间复杂度:

    • 判断回文:O(n),其中 n 是字符串长度。
    • 删除字符并判断:最坏情况下每次删除后都判断回文,复杂度为 O(n^2)
    • 总复杂度:O(n^2)(对每个字符串)。
  • 空间复杂度:

    • O(1)(不考虑输入字符串本身的空间,只使用常数额外空间)。

相关文章:

  • 从头开始开发基于虹软SDK的人脸识别考勤系统(python+RTSP开源)(二)
  • 【HarmonyOS Next】鸿蒙应用加载SVG文件显示图标
  • ArcGIS Pro字段编号相关代码
  • Kafka常用指令(详细)
  • 2025华为OD机试真题最新题库 (B+C+D+E卷) + 在线OJ在线刷题使用说明(C++、Java、Python合集)(正在更新E卷,目前已收录581道)
  • 【时序图】1.StarUML绿化
  • Scala编程_实现Rational的基本操作
  • 远程监控项目描述以及总体框架
  • C# 泛型中的协变、抗变和裂变:概念与应用
  • SSM框架
  • NLP常见任务专题介绍(1)-关系抽取(Relation Extraction, RE)任务训练模板
  • SSH可以连接成功,但VSCode连接不成功的问题
  • 【GPT入门】第6课 openai接口介绍与参数说明
  • 【09】单片机编程核心技巧:变量赋值,从定义到存储的底层逻辑
  • blender学习25.3.11
  • visual studio 2022最常用的快捷键
  • 小程序实现存储用户注册信息功能 前后端+数据库联调
  • 《 C++ 点滴漫谈: 三十 》高手写 C++,参数这样传才高效!你真的用对了吗?
  • 分而治之:用于 RGB-T 显著目标检测的 Confluent Triple-Flow 网络
  • Elasticsearch Java API Client [8.17] 使用
  • 陕西省市监局通报5批次不合格食品,涉添加剂超标、微生物污染等问题
  • 烤肉店从泔水桶内捞出肉串再烤?西安未央区市监局:停业整顿
  • 联合国报告:全球经济前景恶化,面临高度不确定性
  • 选址江南制造总局旧址,上海工业博物馆建设有新进展
  • 国家卫生健康委通报关于肖某引发舆情事件调查处置进展情况
  • 92岁上海交大退休教师捐赠百万元给学校,其父也曾设奖学金