Leetcode 3085. Minimum Deletions to Make String K-Special

  • [Leetcode 3085. Minimum Deletions to Make String K-Special](#Leetcode 3085. Minimum Deletions to Make String K-Special)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题思路上来说的话我们只需要统计一下word当中所有的字符出现的频次,然后依次排序,我们只需要考察各个删除方案使得所有存在的频次之间的差值不多于 k k k即可。

而对于各个具体的删除方案的考察,我们只需要用一个滑动窗口来考察一下一下各个字母作为起点时允许的频次范围并计算一下对应方案下所需要删除的元素个数即可。

显然,对于任意时刻,左边界左侧的字符全部不采用,而右边界右侧的元素则全部替换为范围上界即可。

且不难看出,左右边界的移动必然都是单调的。

2. 代码实现

给出python代码实现如下:

python 复制代码
class Solution:
    def minimumDeletions(self, word: str, k: int) -> int:
        n = len(word)
        cnt = Counter(word)
        cnt = sorted(cnt.values())
        i,j,m = 0,0,len(cnt)
        ans, s = n, 0
        while i < m:
            while j < m and cnt[j]-cnt[i] <= k:
                s += cnt[j]
                j += 1
            ans = min(ans, n-(s+(cnt[i]+k)*(m-j)))
            s -= cnt[i]
            i += 1
        return ans

提交代码评测得到:耗时93ms,占用内存17.6MB。

相关推荐
f狐0狸x4 天前
【蓝桥杯每日一题】3.28
c语言·数据结构·c++·蓝桥杯·滑动窗口
ゞ 正在缓冲99%…7 天前
leetcode3.无重复字符的最长字串
算法·leetcode·滑动窗口
小卡皮巴拉14 天前
【力扣刷题实战】无重复的最长字串
开发语言·c++·算法·leetcode·滑动窗口
daily_233315 天前
coding ability 展开第四幕(滑动指针——巩固篇)超详细!!!!
c++·算法·字符串·哈希算法·滑动窗口
daily_233319 天前
coding ability 展开第三幕(滑动指针——基础篇)超详细!!!!
android·开发语言·数据结构·c++·算法·滑动窗口
闻缺陷则喜何志丹1 个月前
【二分查找、滑动窗口】P10389 [蓝桥杯 2024 省 A] 成绩统计|普及+
c++·算法·蓝桥杯·二分查找·滑动窗口·洛谷·成绩
WenGyyyL1 个月前
蓝桥杯真题——近似gcd(很离谱!!!)
算法·leetcode·蓝桥杯·滑动窗口
源代码•宸2 个月前
Leetcode—487. 最大连续1的个数 II【中等】Plus
c++·经验分享·算法·leetcode·滑动窗口
神秘的t2 个月前
优选算法合集————双指针(专题二)
java·数据结构·算法·滑动窗口
L_M_TY2 个月前
G1. Yunli‘s Subarray Queries (easy version)
算法·stl·滑动窗口·离线查询