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

小红的回文子串(B组)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

小红拿到了一个字符串,她可以操作最多1次:修改任意一个字符。
小红希望操作结束后,长度为3的回文连续子串的数量尽可能多。请你求出这个数量。

输入描述:

一个仅包含小写字母的字符串。长度不超过100。

输出描述:

一个整数,代表操作结束后,长度为3的回文连续子串的数量的最大值。

示例1

输入

复制abcde

abcde

输出

复制1

1

说明

将第二个字符修改为'd'即可,这样字符串变成"adcde",共包含1个长度为3的回文子串。
import java.util.Scanner;

public class Main {

    // 计算字符串 s 中三字符回文子串的个数。
    public static int countThreePalindrome(String s) {
        int count = 0;
        for (int i = 1; i < s.length() - 1; ++i) {
            if (s.charAt(i - 1) == s.charAt(i + 1)) {
                count++;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        int ans = countThreePalindrome(s); // 不修改的初始回文数

        // 根据题目要求,s 长度最大为 100. 因此可以承受 O(26 * n^2) 的复杂度。
        for (int i = 0; i < s.length(); ++i) {
            for (char ch = 'a'; ch <= 'z'; ++ch) { // 枚举所有可能的字符
                StringBuilder modified = new StringBuilder(s);
                modified.setCharAt(i, ch);    // 替换当前位置的字符为 ch
                ans = Math.max(ans, countThreePalindrome(modified.toString())); // 维护替换后回文的最大数量
            }
        }

        System.out.println(ans); // 输出回文的最大数量
        scanner.close();
    }
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        //长度为3只有两种情况 aba 和 aaa 也就是说中间那个数其实不重要 首尾决定了是否是回文串
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String s = bf.readLine();
        long res = 0;
        for (int i = 0; i + 2 < s.length(); i++) {
            if(s.charAt(i) == s.charAt(i+2)) res++;
        }

        for (int i = 2; i + 2 < s.length(); i++) {
            //最优情况 因为操作是能修改一次 只要存在这种情况直接修改 在原res基础上算上2的贡献度
            if(s.charAt(i) != s.charAt(i + 2) && s.charAt(i) != s.charAt(i - 2) && s.charAt(i - 2) == s.charAt(i + 2)){
                System.out.println(res+2);
                return;
            }
        }

        for (int i = 2; i < s.length(); i++) {
            //改成等于前面的
            if(s.charAt(i) != s.charAt(i - 2) && (i + 2 > s.length() || s.charAt(i + 2) != s.charAt(i - 2))) {
                System.out.println(res+1);
                return;
            }
        }

        for (int i = 0; i + 2 < s.length(); i++) {
            //改成等于后面的
            if(s.charAt(i) != s.charAt(i + 2) && (i - 2 < 0 || s.charAt(i + 2) != s.charAt(i - 2))) {
                System.out.println(res+1);
                return;
            }
        }
        System.out.println(res);
    }
}


http://www.kler.cn/a/565431.html

相关文章:

  • Web自动化之Selenium 超详细教程(python)
  • 使用vscode导出Markdown的PDF无法显示数学公式的问题
  • 工具MyBatis Generator(MBG)
  • 【Java项目】基于Spring Boot的旅游管理系统
  • 纷析云:赋能企业财务数字化转型的开源解决方案
  • 苍穹外卖-阿里云OSS文件上传
  • Java语法基础知识点1
  • android studio 中止了一个已建立的连接
  • C++11相较于C++98的新特性介绍:列表初始化,右值引用与移动语义
  • Java和JavaScript的比较
  • MQ 笔记
  • 父子继承与转型
  • Redis 底层数据结构 —— SDS(简单动态字符串)
  • AI革命下的多元生态:DeepSeek、ChatGPT、XAI、文心一言与通义千问的行业渗透与场景重构
  • 解决各大浏览器中http地址无权限调用麦克风摄像头问题
  • 按键精灵安卓/ios脚本的连点器的坐标点获取教程
  • mysql怎样优化where like ‘%字符串%‘这种模糊匹配的慢sql
  • GB 44495-2024《汽车整车信息安全技术要求》标准解读|内容架构、测试内容、应对措施
  • 【语音编解码】常用的基于神经网络的语音编解码方案对比
  • 【BES2500x系列 -- RTX5操作系统】系统执行流程 -- 系统初始化 -- main函数 --(十一)