📅  最后修改于: 2023-12-03 15:11:55.573000             🧑  作者: Mango
给定一个仅包含 0 和 1 的字符串 s,找出要删除的最小元素个数,使得删除后 s 中 0 和 1 的个数相等。
输入: "11000"
输出: 1
解释: 删除 "1" 号元素,得到字符串 "1000",两个 0 和 1 个 1。
输入: "001011"
输出: 1
解释: 删除 "5" 号元素,得到字符串 "00101",两个 0 和 1 个 1。
我们可以先统计出字符串中 0 和 1 的个数,然后依次遍历字符串,用一个变量 diff 记录当前遍历位置之前 0 和 1 数量的差值(即 0 的数量减去 1 的数量),如果 diff 相等于之前统计的 0 和 1 数量的差值,则说明当前位置可以是删除的元素,删除后 0 和 1 的数量相等,否则继续遍历。
具体实现可以使用两个变量 zero 和 one 记录字符串中 0 和 1 的个数,然后遍历字符串,当遇到 0 时,zero 加 1,当遇到 1 时,one 加 1,然后计算当前差值 diff,如果 diff 等于之前统计的差值,则说明当前位置可以删除,删除后计算新的差值并更新统计值,最后返回删除的元素个数。
代码实现如下:
def minDeletions(s: str) -> int:
zero = s.count('0')
one = len(s) - zero
diff = zero - one
count = 0
for c in s:
if c == '0':
zero -= 1
else:
one -= 1
new_diff = zero - one
if new_diff == diff:
count += 1
diff = new_diff
return len(s) - count
时间复杂度:$O(n)$
空间复杂度:$O(1)$