leetcode交替二进制字符串

0. 交替二进制字符串

交替二进制字符串 是指有0,1 构成的、且0,1相间的字符串,比如“010”, “1010”

解决的方法,可以遍历两种可能:‘0’开头的交替字符串 或者 ‘1’ 开头的字符串。

1. leetcode 1758 生成交替二进制字符串的最少操作数

在这里插入图片描述

class Solution:
    def minOperations(self, s: str) -> int:
        temp1 = 0
        temp2 = 0
        for i in range(len(s)):
            if i%2 == 0:
                if s[i] != "0":
                    temp1 +=1
                else:
                    temp2 +=1
            else:
                if s[i] != "1":
                    temp1 +=1
                else:
                    temp2 +=1
        return min(temp1, temp2)    

在这里插入图片描述

import collections
class Solution:
    def minSwaps(self, s: str) -> int:
        dicta = collections.Counter(s)
        if abs(dicta['0']- dicta['1'])>1:
            return -1
        res = 0
        N = len(s)
        if N%2 == 0:
            new1 = '01'*(N//2)
            new2 = '10' *(N//2)
            count1 = 0
            count2 = 0
            for i in range(N):
                if new1[i] !=s[i]:
                    count1+=1
                if new2[i] != s[i]:
                    count2+=1
            res = min(count1, count2)        
        else:    
            if dicta['0'] > dicta['1']:
                new = '01'*(N//2) + '0'
            else:
                new = '10'*(N//2) + '1'
            for i in range(N):
                if s[i] != new[i]:
                    res +=1      
        return res//2  

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值