题目

题目:1653. 使字符串平衡的最少删除次数 - 力扣(LeetCode)

思路

1、贪心+前缀和

遍历每个字母间隔,对于每一个间隔,有:

  • 删除左侧的所有’b’,删除右侧的所有’a’

取删除数最小的间隔

2、动态规划

定义 dp[i]为前 i 个字符中的最小删除数, 有状态转移方程

其中一维数组 dp 可压缩
代码:

func minimumDeletions(s string) int {
    length := len(s)
    dp := 0
    cntB := 0
    if s[0] == 'b'{
        cntB++
    }
    for i:=1; i<length; i++{
        if s[i] == 'b'{
            cntB++
        }else{
            dp = min(dp + 1, cntB)
        }
    }
    return dp
}
func min(x,y int) int{
    if(x < y) {
        return x
    }
    return y
}