来自北大算法课的Leetcode题解:1653. 使字符串平衡的最小删除次数

代码仓库Github | Leetcode solutions @doubleZ0108 from Peking University.

  • 解法1(T48% S98%):因为只有两个字符,那无非是删a还是删b的事,当某个位置左侧没有b且右侧没有a则代表平衡,我们模拟所有这样的位置,计算这个位置左边的b和右面的a的总个数即可,问题转换成了前缀和后缀问题,首先先统计a的后缀次数,b的前缀次数肯定为0,从头到尾模拟所有位置,计算每个位置左边b和右面a的总个数,选最小值即可
    • 需要注意的一点是结果最开始不能初始化为s的长度,因为最大可能就是站在开始把所有a都删了,如果初始化为s的长度,全b的样例会有问题
class Solution:
    def minimumDeletions(self, s: str) -> int:
        righta, leftb = s.count('a'), 0
        res = righta+leftb  # 不能初始化为len(s) 全b的序列会错
        for ch in s:
            if ch == 'a':
                righta -= 1
            else:
                leftb += 1
            res = min(res, righta+leftb)
        return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

doubleZ0108

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值