每日一题|2022-10-9|856. 括号的分数

给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:

1、    () 得 1 分。
2、   AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。

3、  (A) 得 2 * A 分,其中 A 是平衡括号字符串。

 

思路1:用栈模拟

 

 

Go代码如下:

/*
( () ( () ))

[0]
[0, 0]
[0, 1]
[0, 1, 0]
[0, 1, 0, 0]
[0, 1, 0, 1]
[0, 1, 2]
[6]
*/
func scoreOfParentheses(S string) int {
	length := len(S)
	if length < 2 {return 0}

	var stack []int

	for i := 0; i < length; i++ {
		if S[i] == '(' {    // 遇到左括号,则用0标识,然后入站
			stack = append(stack, 0)
		} else { // 如果遇到别的 
            if stack[len(stack)- 1] == 0 { // 如果栈顶是左括号,则弹出左括号,存进去1
                stack[len(stack) - 1] = 1
            } else {    // 如果遇到别的,而且栈顶不是左括号
                k, j, tmp := 0, len(stack) - 1, 0   
                for c := stack[j]; c != 0; {    // temp把栈顶顶值都存下来
                    tmp += c
                    j--
                    k++
                    c = stack[j]
                }
                stack = append(stack[:len(stack) - 1 - k], tmp << 1)    // 重点
                tmp = 0
            }
        }
	}

    sum := 0
    for _, v := range stack {
        sum += v
    }
	return sum
}

思路2: 计数

func scoreOfParentheses(s string) int {
	ans, d := 0, 0
	for i, c := range s {
		if c == '(' {
			d++
		} else {
			d--
			if s[i-1] == '(' {
				ans += 1 << d
			}
		}
	}
	return ans
}

 图片来自 【爪哇缪斯】图解LeetCodehttps://leetcode.cn/problems/score-of-parentheses/solution/zhua-wa-mou-si-by-muse-77-hy72/

 这道题很难受。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值