剑指OfferII092.翻转字符

题目

如果一个由 '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'

注意:本题与主站 926 题相同:

解题思路分析

1、动态规划;时间复杂度O(n),空间复杂度O(n)

剑指OfferII092.翻转字符

func minFlipsMonoIncr(S string) int {
   n := len(S)
   dpA := make([]int, n) // 0 结尾
   dpB := make([]int, n) // 1 结尾
   if S[0] == '1' {
      dpA[0] = 1
   } else {
      dpB[0] = 1
   }
   for i := 1; i < n; i++ {
      if S[i] == '1' {
         dpA[i] = dpA[i-1] + 1            // 需要改为0
         dpB[i] = min(dpB[i-1], dpA[i-1]) // 1结尾和0结尾的最小值
      } else {
         dpA[i] = dpA[i-1]                    // 不需要改为0
         dpB[i] = min(dpB[i-1], dpA[i-1]) + 1 // 1结尾和0结尾的最小值+1
      }
   }
   return min(dpA[n-1], dpB[n-1])
}

func min(a, b int) int {
   if a > b {
      return b
   }
   return a
}

2、动态规划;时间复杂度O(n),空间复杂度O(1)

func minFlipsMonoIncr(S string) int {
   n := len(S)
   a := 0 // 0 结尾
   b := 0 // 1 结尾
   if S[0] == '1' {
      a = 1
   } else {
      b = 1
   }
   for i := 1; i < n; i++ {
      if S[i] == '1' {
         a, b = a+1, min(a, b)
      } else {
         a, b = a, min(a, b)+1
      }
   }
   return min(a, b)
}

func min(a, b int) int {
   if a > b {
      return b
   }
   return a
}

3、前缀和;时间复杂度O(n),空间复杂度O(n)

func minFlipsMonoIncr(S string) int {
   n := len(S)
   arr := make([]int, n+1)
   for i := 1; i <= n; i++ {
      arr[i] = arr[i-1]
      if S[i-1] == '1' {
         arr[i]++
      }
   }
   res := n
   for i := 0; i <= n; i++ {
      left := arr[i]
      right := n - i - (arr[n] - arr[i])
      res = min(res, left+right)
   }
   return res
}

func min(a, b int) int {
   if a > b {
      return b
   }
   return a
}

总结

Medium题目,题目同leetcode 926.将字符串翻转到单调递增

展开阅读全文

页面更新:2024-03-12

标签:字符   本题   复杂度   前缀   示例   字符串   单调   结尾   最小   题目   思路   次数   时间   动态   科技   空间

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top