📅  最后修改于: 2023-12-03 15:11:07.855000             🧑  作者: Mango
在二进制字符串中,可能会存在连续的相似字符。现在我们的任务是要让这个二进制字符串清空,同时最小化删除的字符数目。具体来说,我们需要删除所有相邻的相同字符,直到字符串为空。例如,给定二进制字符串 "11000101",我们可以先删除前两个 "11",得到 "000101",然后删除 "00",得到 "0101",最后删除 "01",得到空字符串 "",总共删除了 6 个字符。这是删除字符数目最小的方法。现在,请完成函数 minDeletions(s: str) -> int
,其中 s
是一个二进制字符串,返回使得 s
清空所需的最小删除字符数目。
题目要求删除连续相似字符,可以先遍历整个字符串,如果遇到相邻的相同字符,就将其标记为待删除。然后,我们要考虑要删除哪些字符,以使得删除字符数目最小。因为我们假设所有相同的字符都是相邻的,因此我们只需要统计每种字符出现次数最高的情况,需要删除的字符数目即为字符串长度减去这个最高值。
def minDeletions(s: str) -> int:
n = len(s)
d = {}
for c in s:
if c not in d:
d[c] = 1 # 如果字符第一次出现,在字典中添加它并把出现次数设为 1
else:
d[c] += 1 # 否则出现次数加 1
max_freq = max(d.values()) # 找到出现次数最高的字符的次数
return n - max_freq # 字符串长度减去最高出现次数即为需要删除的字符数目
assert minDeletions("11000101") == 6
assert minDeletions("10") == 0
assert minDeletions("111000") == 3