如果一个二进制字符串,是以一些
0
(可能没有0
)后面跟着一些1
(也可能没有1
)的形式组成的,那么该字符串是 单调递增 的。给你一个二进制字符串
s
,你可以将任何0
翻转为1
或者将1
翻转为0
。返回使
s
单调递增的最小翻转次数。示例 1:
输入:s = "00110" 输出:1 解释:翻转最后一位得到 00111.示例 2:
输入:s = "010110" 输出:2 解释:翻转得到 011111,或者是 000111。示例 3:
输入:s = "00011000" 输出:2 解释:翻转得到 00000000。提示:
1 <= s.length <= 105
s[i]
为'0'
或'1'
/**
* @param {string} s
* @return {number}
*/
var minFlipsMonoIncr = function(s) {
let dp = Array.from({length:s.length + 1}).map(item => [0,0]);
dp[0][0] = s.charAt(0) == '0' ? 0 : 1;
dp[0][1] = s.charAt(0) == '1' ? 0 : 1;
for(let i = 1;i < s.length;i++){
dp[i][0] = dp[i - 1][0] + (s.charAt(i) == '0' ? 0 : 1);
dp[i][1] = Math.min(dp[i-1][0],dp[i-1][1]) + (s.charAt(i) == '1' ? 0 : 1);
}
return Math.min(dp[s.length -1][0],dp[s.length - 1][1]);
};
标签:charAt,示例,length,单调,字符串,leetcode926,dp,翻转
From: https://blog.csdn.net/Turboyiyi/article/details/142754331