LeetCode 1702 修改后的最大二进制字符串(贪心)

题目

思路

   这道题的切入点在于题面中所给出的第二个操作。子串中所有的“10”可以变成“01”,也就是说当出现1和0交替的情况时,可以通过这种方法将0尽量移动到前面。而当多个0聚集到一起后,就可以使用第1个条件将前方的0都改为1,最后只留下一个0。还要考虑到的是如果从字符串开始位置有连续1出现,则这些1是不用移动的。所以经过这种方法初步处理过后,对应的列表会出现111.....000....11这种情况,之后使用第2条规则将中间的0化为只有一个0,这就是最终答案。在使用算法之前需要特判一下原字符串没有0的情况。

代码

 

class Solution:
    def maximumBinaryString(self, binary: str) -> str:
        dic={}
        for temp in binary:
            dic[temp]=dic.get(temp,0)+1
        if dic.get('0')==None or dic.get('0')==1:
            return binary
        templist=list(binary)
        n=len(binary)
        #print(dic)
        start=0   //记录最左侧的连续1的中止位置
        for i in range(n):
            if binary[i]=='0':
                start=i
                break
        for i in range(n):
            if i==start+dic['0']-1:
                templist[i]='0'
            else:
                templist[i]='1'
        return ''.join(templist)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值