宝宝精刷题笔记 leetcode 1758. 生成交替二进制字符串的最少操作数()-其他
宝宝精刷题笔记 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)