📅  最后修改于: 2023-12-03 15:10:50.675000             🧑  作者: Mango
给定一个只包含数字 0 和 1 的二进制字符串,你可以使用一个操作将其翻转任意次,操作定义如下:
如果存在两个相邻且都是 1 的位,那么就可以翻转这两位的状态。
求经过操作后,是否可以使得二进制字符串不包含相邻的 1。
我们可以使用贪心的思想解决该问题。因为如果存在两个相邻且都是 1 的位,那么我们就可以考虑翻转其中的一个,从而避免出现相邻的 1。所以我们可以遍历整个二进制字符串,找出所有相邻的 1,并选择其中的一个进行翻转。
但是这种贪心的解法并不完美。因为在翻转之后,可能会出现新的相邻的 1,从而导致无法达成目标。例如,如果二进制字符串为 111000,我们翻转第一个相邻的 1,得到 101000,但是此时我们又出现了相邻的 1。所以我们需要对整个二进制字符串进行多次遍历,直到不能再翻转为止。
def can_flip_zeroes(s: str) -> bool:
n = len(s)
last = -1
for i in range(n):
if s[i] == '1':
if last != -1 and i - last <= 1:
return False
last = i
return True