# 926_Flip_String_to_Monotone_Increasing
###### tags: `leetcode`
## Problem Statement
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:
> $1 \leq s.length \leq 10^5$
s[i] is either '0' or '1'
## Solution
- This is a dynamic programming problem.
- You can regard the string to be added one by one.
- Everytime when the digit is added, there re 2 posibilities.
- Keep all the digits as 1 in the back.
- Keep the whole string as 0
- Keep a record as the number of 1 to be turned as 0 for the case of 2
- Use one variable to record keep the legitimate one with the last one added.
- See which one is better and update the last one.
```cpp=
for (auto c : s) {
if (c == '1') counter++; //number of 1 in the string
else flips++; //last legitimate solution count
flips = min(flips, counter);
}
```