856. 括号的分数 中等

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

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

示例 1:

输入: "()"
输出: 1

示例 2:

输入: "(())"
输出: 2

示例 3:

输入: "()()"
输出: 2

示例 4:

输入: "(()(()))"
输出: 6

提示:

  • S 是平衡括号字符串,且只含有 ( 和 ) 。
  • 2 <= S.length <= 50

代码参考:

package main

import "fmt"

func main() {
    fmt.Println(scoreOfParentheses("(())")) // 2
}

// 可以,这很栈
// 简化问题,解决 (()) 和 (()()) 即可
func scoreOfParentheses(S string) int {
    var s Stack
    for _, r := range S {
        switch r {
        case '(':
            s.Push(-1)
        case ')':
            cur := 0
            for s.Peek() != -1 {
                cur += s.Pop()
            }
            s.Pop()
            if cur == 0 {
                s.Push(1)
            } else {
                s.Push(cur * 2)
            }
        }
    }

    sum := 0
    for !s.IsEmpty() {
        sum += s.Pop()
    }
    return sum
}
最后编辑: kuteng  文档更新时间: 2021-06-05 10:16   作者:kuteng