leetcode 1758. 生成交替二進位制字串的最少運算元
阿新 • • 發佈:2022-11-29
問題描述:
給你一個僅由字元 '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)