JZX轻语:简

LeetCode 1653 - 使字符串平衡的最少删除次数

发表于2026年02月07日

#枚举 #字符串

从左到右枚举所有的“分割点”,计算在该点处为了达成“左侧全是'a'、右侧全是'b'”的状态所需要删除的字符总数(即:左侧的'b'数量 + 右侧的'a'数量),求最小值即可。需要两次遍历:第一次遍历统计整个字符串中两个字符的数量;第二次遍历用于维护左(左侧已遍历的字符数量,可以计算右侧的字符数量)枚举右(分割点)。

class Solution {
public:
    int minRemoval(vector<int>& nums, int k) {
        std::sort(nums.begin(), nums.end());
        int left = 0, right = 0;
        int max_window = 0;
        for (left = 0; left < nums.size(); ++left) {
            while (right < nums.size() && nums[right] <= k * static_cast<unsigned long long>(nums[left])) {
                ++right;
            }
            max_window = max(max_window, right - left);
        }
        return nums.size() - max_window;
    }
};

闪念标签:LC

题目链接:https://leetcode.cn/problems/minimum-deletions-to-make-string-balanced