分析
dp[i][0]表示把nums[i]反转为0,所需要的最小反转次数。
dp[i][1]表示把nums[i]反转为1,所需要的最小反转次数。
若s[i-1] == ‘0’,s[i]是0或者1都可以保持单调性。
若s[i-1] == ‘1’,s[i]则必须为1才可以保持单调性(必须满足i-1是1)。
三目运算符的优先级低于加减运算符!
class Solution {
public int minFlipsMonoIncr(String s) {
int n = s.length();
char[] ch = s.toCharArray();
int[][] dp = new int[n][2];
dp[0][0] = ch[0] == '0' ? 0 : 1;
dp[0][1] = ch[0] == '1' ? 0 : 1;
for (int i = 1; i < n; i++) {
dp[i][0] = dp[i-1][0] + (ch[i] == '0' ? 0 : 1);
dp[i][1] = Math.min(dp[i-1][0],dp[i-1][1])+ (ch[i] == '1' ? 0 : 1);
}
return Math.min(dp[n-1][0],dp[n-1][1]);
}
}