A binary string is monotone increasing if it consists of some number of 0
's (possibly none), followed by some number of 1
's (also possibly none).
You are given a binary string s
. You can flip s[i]
changing it from 0
to 1
or from 1
to 0
.
Return the minimum number of flips to make s
monotone increasing.
class Solution:
def minFlipsMonoIncr(self, s: str) -> int:
min_flips = flips = s.count('0')
# now all are 1s, find a dividing line,
# flip all 1 to the left of divider to 0
# flip all 0 to the right of divider to 1
for c in s:
# now c in to the left of divider, so c should flip to 1
if c == '1':
flips += 1
# if c is 0, we don't need to flip it
# but since we have already fliped it, we minus 1
else:
flips -= 1
min_flips = min(min_flips, flips)
return min_flips