1. 程式人生 > 其它 >leetcode 1758. 生成交替二進位制字串的最少運算元

leetcode 1758. 生成交替二進位制字串的最少運算元

問題描述:

給你一個僅由字元 '0' 和 '1' 組成的字串 s 。一步操作中,你可以將任一 '0' 變成 '1' ,或者將 '1' 變成 '0' 。返回使 s 變成 交替字串 所需的 最少 運算元。
交替字串 定義為:如果字串中不存在相鄰兩個字元相等的情況,那麼該字串就是交替字串。例如,字串 "010" 是交替字串,而字串 "0100" 不是。

示例:

輸入: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)