首先先附上链接:3085. 成为 K 特殊字符串需要删除的最少字符数
【思路解析】
- 要求是字符串每个字符频率之差的绝对值必须要<=k
- 删除次数最少 PS:只能做删除操作
所以就是
- 删除就是将数的数量减少,即只有这一种情况。
- 可以看做我们获取的是一个list现在我们要进行减操作,使最大值与最小值相减小于等于k。
- 减的操作有2种
- 使大数变小
- 使小数消失
- 减的操作有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