#leetcode2193. 得到回文串的最少操作次数

    ID: 3100 传统题 1000ms 128MiB 尝试: 1 已通过: 1 难度: 4 上传者: 标签>基础算法贪心树形数据结构树状数组字符串双指针

得到回文串的最少操作次数

题目描述

给你一个只包含小写英文字母的字符串 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 只包含小写英文字母。
  • 保证可以通过有限次相邻交换变成回文串。