Flip String to Monotone Increasing

medium string dp prefix sum

Problem

Given a binary string s, return the minimum number of flips to make it monotone increasing (all 0s, then all 1s).

Inputs = "00110"
Output1
Pick a split index i; answer = min(ones_before_i + zeros_after_i).

def minFlipsMonoIncr(s):
    ones = flips = 0
    for c in s:
        if c == '1': ones += 1
        else: flips = min(flips + 1, ones)
    return flips
function minFlipsMonoIncr(s) {
  let ones = 0, flips = 0;
  for (const c of s) {
    if (c === '1') ones++;
    else flips = Math.min(flips + 1, ones);
  }
  return flips;
}
class Solution {
    public int minFlipsMonoIncr(String s) {
        int ones = 0, flips = 0;
        for (char c : s.toCharArray()) {
            if (c == '1') ones++;
            else flips = Math.min(flips + 1, ones);
        }
        return flips;
    }
}
int minFlipsMonoIncr(string s) {
    int ones = 0, flips = 0;
    for (char c : s) {
        if (c == '1') ones++;
        else flips = min(flips + 1, ones);
    }
    return flips;
}
Time: O(n) Space: O(1)