offer2-92


如果一个由 '0''1' 组成的字符串,是以一些 '0'(可能没有 '0')后面跟着一些 '1'(也可能没有 '1')的形式组成的,那么该字符串是 单调递增 的。

我们给出一个由字符 '0''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 <= 20000
  • s 中只包含字符 '0''1'

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int minFlipsMonoIncr(String s) {
        int[] left1 = new int[s.length()];
        int[] right0 = new int[s.length()];

        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i - 1) == '1') {
                left1[i] = left1[i - 1] + 1;
            } else {
                left1[i] = left1[i - 1];
            }
        }
        for (int i = s.length() - 2; i >= 0; i--) {
            if (s.charAt(i + 1) == '0') {
                right0[i] = right0[i + 1] + 1;
            } else {
                right0[i] = right0[i + 1];
            }
        }

        int result = Integer.MAX_VALUE;

        for (int i = 0; i < s.length(); i++) {
            int cur = left1[i] + right0[i];
            if (cur < result) {
                result = cur;
            }
        }

        return result;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

文章作者: 倪春恩
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 倪春恩 !