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

【蓝桥杯】回文字符串

回文字符串

  • 问题描述
  • 代码
  • 易错:

回文字符串

问题描述

小蓝最近迷上了回文字符串,他有一个只包含小写字母的字符串 S,小蓝可以往字符串 S 的开头处加入任意数目个指定字符: l、q、b(ASCII 码分别为: 108、113、98)。小蓝想要知道他是否能通过这种方式把字符串 S 转化为一个回文字符串。
输入格式
输入的第一行包含一个整数 T,表示每次输入包含 T 组数据。
接下来依次描述 T 组数据。
每组数据一行包含一个字符串 S
输出格式
输出 T 行,每行包含一个字符串,依次表示每组数据的答案。如果可以将 S 转化为一个回文字符串输出 Yes,否则输出 No。
样例输入
3
gmgqlq
pdlbll
aaa
样例输出
Yes
No
Yes
样例说明
对于 gmgqlq,可以在前面加上
qlq→qlqgmgqlq 转化为一个回文字符串;
对于 pdlbll,无法转化为一个回文字符串;
对于 aaa,本身就是一个回文字符串。
评测用例规模与约定
对于 50% 的评测用例, 1≤∣S∣≤1000,其中 ∣S∣ 表示字符串 S 的长度;
对于所有评测用例, 1≤T≤10,1≤∑∣S∣≤10 6

代码

注意全为特殊字符时的处理

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String str = new String();
        String lbq = "lbq";
        
        sc.nextLine();//nextInt()不读空白符
        for (int i = 0; i < n; i++) {
            str = sc.nextLine();
            int len = str.length(), len1 = 0, len2 = 0;
            int left = 0, right = len - 1;
            while (right >= 0 && lbq.indexOf(str.charAt(right--)) != -1) {
                len2++;
            }
            while (left < right && lbq.indexOf(str.charAt(left++)) != -1) {
                len1++;
            }
            if (len1 > len2) {
                System.out.println("No");
            } else if (isPLR(str.substring(0, len - len2 + len1))) {
                System.out.println("Yes");
            } else {
                System.out.println("No");
            }
        }
    }
    
    public static boolean isPLR(String str) {
        int left = 0;
        int right = str.length() - 1;
        while (left < right) {
            if (str.charAt(left) != str.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}

易错:

考虑不全面 虽然写成这样也可能会过 但 是运气好的
例如qmzmllq就会出错 应该是No但会输出Yes

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int t = scan.nextInt();
        while (t-- > 0) {
            String s = scan.next();
            System.out.println(f(s) ? "Yes" : "No");
        }
    }

    public static boolean f(String s) {
        int l = 0;
        int r = s.length() - 1;
        while (l < r) {
            if (s.charAt(l) == s.charAt(r)) {
                l++;
                r--;
            } else {
                if (s.charAt(r) == 'l' || s.charAt(r) == 'q' || s.charAt(r) == 'b') {
                    r--;
                } else {
                    return false;
                }
            }
        }
        return true;
    }
}

相关文章:

  • 自己用python写的查询任意网络设备IP地址工具使用实测
  • 什么是 继续预训练、SFT(监督微调)和RLHF
  • 【Java/数据结构】Map与Set(图文版)
  • AllData数据中台商业版发布版本1.2.9相关白皮书发布
  • UML 4+1 视图:搭建软件架构的 “万能拼图”
  • zabbix“专家坐诊”第281期问答
  • Logstash开启定时任务增量同步mysql数据到es的时区问题
  • 淘宝搜索关键字与商品数据采集接口技术指南
  • 软考 中级软件设计师 考点知识点笔记总结 day09 操作系统进程管理
  • 自然语言处理(24:(第六章4.)​seq2seq模型的应用)
  • 卸载360壁纸
  • Android开发:support.v4包与AndroidX
  • AI Agent拐点已至,2B+2C星辰大海——行业深度报告
  • nextjs使用02
  • MySQL在线DDL操作指南
  • 安全框架SpringSecurity入门
  • Window C++ Postmortem Debugger
  • opencv(C++)图像的读写、翻转、绘制、鼠标事件
  • 源码分析之Leaflet中control模块Control基类实现原理
  • Vue2 通过 Object.defineProperty 对哪些数组进行了特殊处理?
  • 运动健康|不同能力跑者,跑步前后营养补给差别这么大?
  • 成都世运会倒计时100天,中国代表团运动员规模将创新高
  • 长三角铁路“五一”假期运输今启动:预计发送旅客量增6%,5月1日当天有望创新高
  • 当AI开始深度思考,人类如何守住自己的慢思考能力?
  • 朝鲜派兵库尔斯克是否有助于解决乌克兰危机?外交部回应
  • 从 “沪惠保” 到 “沪骑保”看普惠保险的 “上海样式”