算法题-双指针应用-字典序最小回文串
题目
给你一个由小写英文字母组成的字符串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));}
}