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

LeetCode 每日一题 1328. 破坏回文串

1328. 破坏回文串

给你一个由小写英文字母组成的回文字符串 palindrome ,请你将其中 一个 字符用任意小写英文字母替换,使得结果字符串的 字典序最小 ,且 不是 回文串。
请你返回结果字符串。如果无法做到,则返回一个 空串 。
如果两个字符串长度相同,那么字符串 a 字典序比字符串 b 小可以这样定义:在 a 和 b 出现不同的第一个位置上,字符串 a 中的字符严格小于 b 中的对应字符。例如,“abcc” 字典序比 “abcd” 小,因为不同的第一个位置是在第四个字符,显然 ‘c’ 比 ‘d’ 小。
示例 1:
输入:palindrome = “abccba”
输出:“aaccba”
解释:存在多种方法可以使 “abccba” 不是回文,例如 “zbccba”, “aaccba”, 和 “abacba” 。
在所有方法中,“aaccba” 的字典序最小。
示例 2:
输入:palindrome = “a”
输出:”"
解释:不存在替换一个字符使 “a” 变成非回文的方法,所以返回空字符串。
提示:
1 <= palindrome.length <= 1000
palindrome 只包含小写英文字母。

题解

题目很好理解,我们需要改变回文字符串中的一个字母,使其不再是回文串并且使其字典序最小

  • 先考虑只有一个字母的情况
    此时拼尽全力改变都还是回文串,所以返回空串 “”

  • 然后对于其余回文串

  • 首先我们考虑如何破坏回文串
    如果回文串字符是偶数个,那么首位一一呼应,改变任意一个字符都会破坏它
    如果字符是奇数个,那么除了中间的字符,改变其余任意字符同样能破坏它

  • 其次由于我们需要其字典序最小,那么毋庸置疑,我们要优先改变靠前的字符,并且将其修改为 ‘a’
    如果考前的字母本就为 ‘a’,那么无论我们怎么修改,都会使字符串变大,所以只
    能去修改其后一位

那么只需要一个循环从头开始枚举字符,如果不是奇数个字符回文串的中间字符且不是 ‘a’,那么我们就可以将其变为 ‘a’,然后退出循环。
如果循环结束都没有找到可以改变的字符,那么说明除了奇数个字符回文串的中间字符外都是 ‘a’,那么便只能修改最后一个字符为 ‘b’,才能是字典序最小


代码如下↓

char* breakPalindrome(char* palindrome) {
    int n=strlen(palindrome);
    if(n==1)
    {
        return "";
    }
    else if(n%2)//个数是奇数个,改变中间字符无用
    {
        int f=1;
        for(int i=0;i<n;i++)
        {
            if(i==n/2)
            {
                continue;
            }
            if(palindrome[i]>'a')
            {
                palindrome[i]='a';
                f=0;
                break;
            }
        }
        if(f)
        {
            palindrome[n-1]='b';
        }
    }
    else
    {
        int f=1;
        for(int i=0;i<n;i++)
        {
            if(palindrome[i]>'a')
            {
                palindrome[i]='a';
                f=0;
                break;
            }
        }
        if(f)
        {
            palindrome[n-1]='b';
        }
    }
    return palindrome;
}

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

相关文章:

  • 机器学习数学基础:42.AMOS 结构方程模型(SEM)分析的系统流程
  • Primer - 自适应学习,AI学习工具
  • 从案例分析看微型工业计算机在智能社区中的卓越表现
  • JavaScript网页设计案例:打造交互式用户体验
  • Stream特性(踩坑):惰性执行、不修改原始数据源
  • Expo知识框架大全详解
  • 不同开发语言之for循环的用法、区别总结
  • Spring Cloud之注册中心之Nacos负载均衡
  • 目标检测中的核心评估指标mAP详解
  • Deeplabv3+改进3:在主干网络中添加NAMAttention|助力涨点!
  • 批量在 Word 的指定位置插入页,如插入封面、末尾插入页面
  • Java基础——java8+新特性——方法引用(::)
  • EXCEL自动化13 | 批量重命名工作簿中的工作表
  • ue5.5崩溃报gpu错误快速修复注册表命令方法
  • 【Python 数据结构 11.二叉搜索树】
  • Hytrix深入学习
  • 前端 | CORS 跨域问题解决
  • 基于ESP32的Python物联网开发实践 - 通过HTTP API控制LED灯
  • Windows下配置Flutter移动开发环境以及AndroidStudio安装和模拟机配置
  • 策略设计模式-下单