Medium
,String
,DP
926. Flip String to Monotone Increasing
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.
Example 1:
Input: s = "00110"
Output: 1
Explanation: We flip the last digit to get 00111.
Example 2:
Input: s = "010110"
Output: 2
Explanation: We flip to get 011111, or alternatively 000111.
Example 3:
Input: s = "00011000"
Output: 2
Explanation: We flip to get 00000000.
Constraints:
s.length
<= 105s[i]
is either '0'
or '1'
.
class Solution:
def minFlipsMonoIncr(self, s: str) -> int:
# f0: Answer to 0's monotone string steps
# f1: Answer to followed by some number of 1's monotone string steps
f0, f1 = 0, 0
for ch in s:
if ch == '0':
f1 += 1
else:
f1 = min(f0, f1)
f0 += 1
return min(f0, f1)
Ron ChenJan 17, 2023
class Solution {
public:
int minFlipsMonoIncr(string s) {
int cnt_1 = 0, res = 0;
for(char c : s)
{
if(c == '1')
cnt_1++;
else
res = min(res+1, cnt_1);
}
return res;
}
};
XD Jan 17, 2023
Time:
Extra Space: