题目
给你一个由小写英文字母组成的字符串s,你可以对其执行一些操作。在一步操作中,你可以用其他小写英文字母替换s中的一个字符。
请你执行尽可能少的操作,使s变成一个回文串。如果执行最少操作次数的方案不止一种,则只需选取字典序最小的方案。
对于两个长度相同的字符串a和b,在a和b出现不同的第一个位置,如果该位置上a中对应字母比b中对应字母在字母表中出现顺序更早,则认为a的字典序比b的字典序要小。
返回最终的回文字符串。
示例1:
输入:s="egcfe"
输出:"efcfe"
解释:将"egcfe"变成回文字符串的最小操作次数为1,修改1次得到的字典序最小回文字符串是"efcfe",只需将'g'改为'f'。
示例2:
输入:s="abcd"
输出:"abba"
解释:将"abcd"变成回文字符串的最小操作次数为2,修改2次得到的字典序最小回文字符串是"abba"。
示例3:
输入:s="seven"
输出:"neven"
解释:将"seven"变成回文字符串的最小操作次数为1,修改1次得到的字典序最小回文字符串是"neven"。
代码实现
public class Solution {
public static String makeSmallestPalindrome(String s) {
char[] chars = s.toCharArray();
int left = 0;
int right = chars.length - 1;
while (left < right) {
System.out.println((int)chars[left]);
System.out.println((int)chars[right]);
if (chars[left] != chars[right]) {
chars[left] = chars[right] = (char) Math.min(chars[left], chars[right]);
}
left++;
right--;
}
return String.valueOf(chars);
}
public static void main(String[] args) {
String s = "abcd";
System.out.println(makeSmallestPalindrome(s));
}
}