Day4-Leetcode每日一题-3085. 成为 K 特殊字符串需要删除的最少字符数

30 阅读1分钟

首先先附上链接:3085. 成为 K 特殊字符串需要删除的最少字符数

【思路解析】

  1. 要求是字符串每个字符频率之差的绝对值必须要<=k
  2. 删除次数最少 PS:只能做删除操作

所以就是

  1. 删除就是将数的数量减少,即只有这一种情况。
  2. 可以看做我们获取的是一个list现在我们要进行减操作,使最大值与最小值相减小于等于k。
    1. 减的操作有2种
      1. 使大数变小
      2. 使小数消失

要通过恰当的操作,使得符合目标情况。

对于每个频率f,计算需删除字符数的步骤:

1. 删除频率小于f的字符:其总出现次数全部计入删除数。

2. 削减频率大于f+k的字符:每个此类字符的删除数为(频率 - (f+k)),累加这些差值。

3. 频率在[f, f+k]的字符:无需删除。

总删除数 = 频率<f的总次数 + 频率>f+k的字符(频率 - (f+k))之和。

class Solution:
    def minimumDeletions(self, word: str, k: int) -> int:
#         哈希加暴力
#   哈希module
        aim_dict = {}
        for i in word:
            if i in aim_dict:
                aim_dict[i] += 1
            else:
                aim_dict[i] = 1
        res = len(word)
#   遍历module
        for i in aim_dict.values():
            delete_num = 0
            for j in aim_dict.values():
                if i > j:
                    delete_num += j
                elif i + k < j:
                    delete_num +=  j - i - k
            res = min(res, delete_num)
        return res