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。

相关推荐
一直学习永不止步9 天前
LeetCode题练习与总结:至少有 K 个重复字符的最长子串--395
java·算法·leetcode·字符串·滑动窗口·哈希表·分治
Tisfy13 天前
LeetCode 3255.长度为 K 的子数组的能量值 II:和官解思路不同的O(n)做法(附思考过程)
数据结构·算法·leetcode·题解·遍历·滑动窗口
GGBondlctrl24 天前
【JavaEE初阶】网络原理—关于TCP协议值滑动窗口与流量控制,进来看看吧!!!
网络·网络协议·tcp/ip·滑动窗口·流量控制·拥塞控制·tcp协议特性
搞笑症患者1 个月前
LeetCode Hot100 - 滑动窗口篇
算法·leetcode·滑动窗口
freephp1 个月前
细聊滑动窗口
滑动窗口
Trouvaille ~1 个月前
【优选算法篇】踏入算法的深邃乐章:滑动窗口的极致探秘
开发语言·数据结构·c++·算法·面试·滑动窗口·哈希表
中间件XL1 个月前
sentinel原理源码分析系列(六)-统计指标
sentinel·滑动窗口·指标统计
UestcXiye1 个月前
Leetcode 第 359 场周赛题解
c++·leetcode·动态规划·滑动窗口·数据结构与算法
ZachOn1y1 个月前
计算机网络:数据链路层 —— 可靠传输服务
网络·计算机网络·滑动窗口·数据链路层·可靠传输·超时重传
Espresso Macchiato1 个月前
Leetcode 3316. Find Maximum Removals From Source String
leetcode·动态规划·leetcode medium·leetcode 3316·leetcode双周赛141