#leetcode2193. 得到回文串的最少操作次数
得到回文串的最少操作次数
题目描述
给你一个只包含小写英文字母的字符串 s。
每一次操作,可以选择 s 中两个相邻的字符并交换它们的位置。
请返回将 s 变成回文串所需的最少操作次数。
保证输入字符串一定可以经过有限次相邻交换变成回文串。
回文串是指从左往右和从右往左读都相同的字符串。
代码框架(LeetCode 函数提交模式)
本题保留 LeetCode 的函数签名。仅提交包含完整实现的 class Solution,不需要编写 main(),也不需要读取标准输入或自行打印答案。
class Solution {
public:
int minMovesToMakePalindrome(string s) {
}
};
评测程序会将输入解析成 string s,调用 Solution::minMovesToMakePalindrome(s) 并验证函数返回的整数。
输入格式
一行,一个使用 LeetCode 字符串表示法的字符串,保留双引号。例如:
"aabb"
这是测试数据文件的存储格式,提交上述 Solution 类时无需自行解析。
输出格式
一行一个整数,表示将字符串变成回文串的最少相邻交换次数。
这是标准输出文件的格式;提交函数实现时只需返回该整数,无需 cout 或 printf。
输入输出样例 #1
输入 #1
"aabb"
输出 #1
2
样例解释
可以通过两次相邻交换将 "aabb" 变成 "abba":
"aabb" → "abab" → "abba"。
输入输出样例 #2
输入 #2
"letelt"
输出 #2
2
样例解释
例如通过 "letelt" → "letetl" → "lettel",共需要两次交换,且无法通过更少的交换完成。
数据范围
1 <= s.length <= 2000。- 字符串
s只包含小写英文字母。 - 保证可以通过有限次相邻交换变成回文串。