本文主要是介绍力扣 第 73 场双周赛 2193. 得到回文串的最少操作次数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
解题思路:贪心。题目确保一定能交换得到回文,首先想到要分两种情况考虑,奇数长度和偶数长度,是否应该计数数组找到奇数长度中点元素?
进一步思考并不需要考虑奇数偶数长度问题,只要按次序处理s[0]....s[n/2]即可。某种特殊情况发生时必然是奇数长度。
class Solution {
public:int minMovesToMakePalindrome(string s) {int i=0,j,k,n=s.size(),ans=0;while(i<(n+1)/2-1)/**< (n+1)/2-1可锁定需要处理的最后一个元素 */{j=s.size()-i-1;while(s[j]!=s[i])j--;/**< 找到和s[i]相等的s[j] */if(j==i){ /**< 特殊情况,s[i]其实是奇数长度中点 */swap(s[i],s[i+1]),ans++;continue;}else{ /**< 模拟法,交换元素使得s[i]==s[s.size()-i-1] */for(k=j;k<s.size()-i-1;k++)swap(s[k],s[k+1]),ans++;}i++;}return ans;}
};
这篇关于力扣 第 73 场双周赛 2193. 得到回文串的最少操作次数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!