-
发表于 2024.04.10
-
比较偏脑筋急转弯的题目,类似于冒泡排序。分析可以得到,题目的两个操作只能将0往前面挪,不能往后面移动,且两个以上的连续0可以最终合并成一个0(在最后一个连续0的位置上)。因此,可以有以下做法:将所有的0都逐步冒泡集合到第一个0的后面, 然后再全部合并至只剩下一个0。而第一个0就没必要往前移动了,这样结果会更小(最后剩下的0的位置会往前了)。
class Solution: def maximumBinaryString(self, binary: str) -> str: first_zero_pos = -1 # 第一个零的位置 zero_cnt = 0 # 零的计数 for i, ch in enumerate(binary): if ch == '0': if first_zero_pos == -1: first_zero_pos = i zero_cnt += 1 if zero_cnt <= 1: # 零的计数小于等于1, 直接返回即可 return binary # 将所有的0都拼接在第一个0后面,然后除了最后一个0, 其他都转为1 return '1' * (first_zero_pos + zero_cnt - 1) + '0' + '1' * (len(binary) - first_zero_pos - zero_cnt)
- LC 题目链接
-