伤心客 发表于 2025-3-6 11:20:13

LeetCode:1328. 破坏回文串(贪心 Java)

目录
1328. 破坏回文串
题目形貌:
实现代码与解析:
贪心
原理思路:

1328. 破坏回文串

题目形貌:

        给你一个由小写英文字母组成的回文字符串 palindrome ,请你将此中 一个 字符用恣意小写英文字母更换,使得结果字符串的 字典序最小 ,且 不是 回文串。
请你返回结果字符串。如果无法做到,则返回一个 空串 。
如果两个字符串长度相同,那么字符串 a 字典序比字符串 b 小可以这样界说:在 a 和 b 出现不同的第一个位置上,字符串 a 中的字符严格小于 b 中的对应字符。比方,"abcc” 字典序比 "abcd" 小,由于不同的第一个位置是在第四个字符,显然 'c' 比 'd' 小。

示例 1:
<strong>输入:</strong>palindrome = "abccba"
<strong>输出:</strong>"aaccba"
<strong>解释:</strong>存在多种方法可以使 "abccba" 不是回文,例如 "<em><strong>z</strong></em>bccba", "a<em><strong>a</strong></em>ccba", 和 "ab<em><strong>a</strong></em>cba" 。
在所有方法中,"aaccba" 的字典序最小。 示例 2:
<strong>输入:</strong>palindrome = "a"
<strong>输出:</strong>""
<strong>解释:</strong>不存在替换一个字符使 "a" 变成非回文的方法,所以返回空字符串。
提示:


[*]1 <= palindrome.length <= 1000
[*]palindrome 只包罗小写英文字母。
实现代码与解析:

贪心

class Solution {
    public String breakPalindrome(String palindrome) {
      
      int n = palindrome.length();
      if (n == 1) {
            return "";
      }
      char[] cs = palindrome.toCharArray();
      for (int i = 0; i * 2 + 1 < n; i++) {
            if (cs != 'a') {
                cs = 'a';
                return new String(cs);
            }
      }
      cs = 'b';
      return new String(cs);
    }
} 原理思路:

        n = 1,无论如何换都是回文。遍历字符串一半,如果不为a换成a。如果前半部门全为a,那么根据回文特性,该字符串全为a,只有把最后一个字符修改为小于a的第一个值b即可。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: LeetCode:1328. 破坏回文串(贪心 Java)