每日一题|2022-10-4|921. 使括号有效的最少添加|Golang|

921. 使括号有效的最少添加

思路1: 模拟

        一个介绍过很多次的做法 : 将「有效括号问题」转化为「分值有效性」的数学判定。

        使用 score 代指处理过程中的得分,将 '(' 记为 +1,将 ')' 记为 -1。

        一个有效的括号应当在整个过程中不出现负数,因此一旦 score 出现负数,我们需要马上增加 ( 来确保合法性;当整个 s 处理完后,还需要添加 socre 等同的 ) 来确保合法性。

Go代码如下:

func minAddToMakeValid(s string) int {
    score, ans := 0,0
    for _, v := range s {
        if v == '(' {
            score += 1
        } else {
            score -= 1
        }
        if score < 0 {
            score = 0
            ans += 1
        }
    }
    return ans + score
}

思路2:栈

遇到一个左括号就入站,遇到一个右括号且满足一定条件就出站,最后统计栈的长度就是所需要的数。

Go代码如下:

 

func minAddToMakeValid(s string) int {
    stack := []rune{}
    for _, c := range s {
        if c == ')' && len(stack) > 0 && stack[len(stack)-1] == '(' {
            stack = stack[:len(stack)-1]
        } else if c == '(' || c == ')' {
            stack = append(stack, c)
        }
    }
	return len(stack)
}

func minAddToMakeValid(s string) int {
	stk := []rune{}
	for _, c := range s {
		if c == ')' && len(stk) > 0 && stk[len(stk)-1] == '(' {
			stk = stk[:len(stk)-1]
		} else {
			stk = append(stk, c)
		}
	}
	return len(stk)
}

好好好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值