如果一个由 '0' 和 '1' 组成的字符串,是以一些 '0'(可能没有 '0')后面跟着一些 '1'(也可能没有 '1')的形式组成的,那么该字符串是单调递增的。
我们给出一个由字符 '0' 和 '1' 组成的字符串 S,我们可以将任何 '0' 翻转为 '1' 或者将 '1' 翻转为 '0'。
返回使 S 单调递增的最小翻转次数。
如果一个由 '0' 和 '1' 组成的字符串,是以一些 '0'(可能没有 '0')后面跟着一些 '1'(也可能没有 '1')的形式组成的,那么该字符串是单调递增的。
我们给出一个由字符 '0' 和 '1' 组成的字符串 S,我们可以将任何 '0' 翻转为 '1' 或者将 '1' 翻转为 '0'。
返回使 S 单调递增的最小翻转次数。
"00110"
1
我们翻转最后一位得到00111.
"00011000"
2
我们翻转得到00000000。
import java.util.*; public class Solution { // 动态规划-状态压缩 public int minFlipsMonoIncr (String s) { int[] dp = new int[2]; for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '0') { // 当前为0 dp[1] = Math.min(dp[0], dp[1])+1; } else { // 当前为1 int tmp = dp[0]+1; dp[1] = Math.min(dp[0], dp[1]); dp[0] = tmp; } } return Math.min(dp[0], dp[1]); } }