宝宝精刷题笔记 leetcode 1758. 生成交替二进制字符串的最少操作数()

问题描述:

给你一个仅由字符 ‘0’ 和 ‘1’ 组成的字符串 s 。一步操作中,你可以将任一 ‘0’ 变成 ‘1’ ,或者将 ‘1’ 变成 ‘0’ 。返回使 s 变成 交替字符串 所需的 最少 操作数。
交替字符串 定义为:如果字符串中不存在相邻两个字符相等的情况,那么该字符串就是交替字符串。例如,字符串 “010” 是交替字符串,而字符串 “0100” 不是。

给你一个仅由字符 ‘0’ 和 ‘1’ 组成的字符串 s 。一步操作中,你可以将任一 ‘0’ 变成 ‘1’ ,或者将 ‘1’ 变成 ‘0’ 。返回使 s 变成 交替字符串 所需的 最少 操作数。
交替字符串 定义为:如果字符串中不存在相邻两个字符相等的情况,那么该字符串就是交替字符串。例如,字符串 “010” 是交替字符串,而字符串 “0100” 不是。

示例:

输入:s = “0100”;输出:1。将”0100″变成”0101″所需要的操作数只需要1
输入:s = “1111”;输出:2。将”1111″变成”0101″或者”1010″均需要2次

输入:s = “0100”;输出:1。将”0100″变成”0101″所需要的操作数只需要1
输入:s = “1111”;输出:2。将”1111″变成”0101″或者”1010″均需要2次

解题思路:

由于字符串中的每个字符仅有2种取值(‘0’或’1’),那么,最后得到的交替字符串只有两种可能,要么是”010101…”,要么是”101010…”。因此,可以直接计算将字符串变成”010101…”以及”101010…”所需要的操作数,并返回最小的操作次数即可。代码如下:

def minOperations(s):
    res1=0     ###101010...的情况
    res2=0     ###010101...的情况
    for i in range(len(s)):
        if i%2 == 0:       ##偶数位置上的结果
            if s[i]=='0':      
                res1 += 1
            else:
                res2 += 1    
        else:
            if s[i]=='0':
                res2 += 1    ##res1是偶数位置为1,奇数位置为0的情况。如果奇数位置为1,则需要替换成0
            else:
                res1 += 1
    return min(res1,res2)
————————

问题描述:

给你一个仅由字符 ‘0’ 和 ‘1’ 组成的字符串 s 。一步操作中,你可以将任一 ‘0’ 变成 ‘1’ ,或者将 ‘1’ 变成 ‘0’ 。返回使 s 变成 交替字符串 所需的 最少 操作数。
交替字符串 定义为:如果字符串中不存在相邻两个字符相等的情况,那么该字符串就是交替字符串。例如,字符串 “010” 是交替字符串,而字符串 “0100” 不是。

给你一个仅由字符 ‘0’ 和 ‘1’ 组成的字符串 s 。一步操作中,你可以将任一 ‘0’ 变成 ‘1’ ,或者将 ‘1’ 变成 ‘0’ 。返回使 s 变成 交替字符串 所需的 最少 操作数。
交替字符串 定义为:如果字符串中不存在相邻两个字符相等的情况,那么该字符串就是交替字符串。例如,字符串 “010” 是交替字符串,而字符串 “0100” 不是。

示例:

输入:s = “0100”;输出:1。将”0100″变成”0101″所需要的操作数只需要1
输入:s = “1111”;输出:2。将”1111″变成”0101″或者”1010″均需要2次

输入:s = “0100”;输出:1。将”0100″变成”0101″所需要的操作数只需要1
输入:s = “1111”;输出:2。将”1111″变成”0101″或者”1010″均需要2次

解题思路:

由于字符串中的每个字符仅有2种取值(‘0’或’1’),那么,最后得到的交替字符串只有两种可能,要么是”010101…”,要么是”101010…”。因此,可以直接计算将字符串变成”010101…”以及”101010…”所需要的操作数,并返回最小的操作次数即可。代码如下:

def minOperations(s):
    res1=0     ###101010...的情况
    res2=0     ###010101...的情况
    for i in range(len(s)):
        if i%2 == 0:       ##偶数位置上的结果
            if s[i]=='0':      
                res1 += 1
            else:
                res2 += 1    
        else:
            if s[i]=='0':
                res2 += 1    ##res1是偶数位置为1,奇数位置为0的情况。如果奇数位置为1,则需要替换成0
            else:
                res1 += 1
    return min(res1,res2)