给你一个由小写英文字母组成的回文字符串 palindrome ,请你将其中 一个 字符用任意小写英文字母替换,使得结果字符串的 字典序最小 ,且 不是 回文串。
请你返回结果字符串。如果无法做到,则返回一个 空串 。
如果两个字符串长度相同,那么字符串 a 字典序比字符串 b 小可以这样定义:在 a 和 b 出现不同的第一个位置上,字符串 a 中的字符严格小于 b 中的对应字符。例如,"abcc” 字典序比 "abcd" 小,因为不同的第一个位置是在第四个字符,显然 'c' 比 'd' 小。
示例 1:输入:palindrome = "abccba"
输出:"aaccba"
解释:存在多种方法可以使 "abccba" 不是回文,例如 "zbccba", "aaccba", 和 "abacba" 。
在所有方法中,"aaccba" 的字典序最小。
示例 2:输入:palindrome = "a"
输出:""
解释:不存在替换一个字符使 "a" 变成非回文的方法,所以返回空字符串。
题目来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/break-a-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:破环回文数,且需要破坏后字典序小,直接遍历回文串,找到第一个大于“a”的字符,将它替换成“a”即可,如果遍历完没有说明字符串全是“a”,那么直接将最后一个字符替换成“b”即可。
代码:
- public static String breakPalindrome(String palindrome) {
- int len=palindrome.length();
- if(len==1) {//字符串长度为1时,返回“”
- return "";
- }
- for(int i=0;i<(len>>1);i++) {//只需要遍历字符串一半长度
- if(palindrome.charAt(i)>'a') {//找到第一个比‘a’的字符,替换成‘a’
- return palindrome.replaceFirst(palindrome.charAt(i)+"", "a");
- }
- }
- return palindrome.substring(0,len-1)+"b";//整个字符串没有,则将最后一个字符替换成‘b’
- }