856 括号的分数 中等
发布者:admin 发表于:445天前 阅读数:538 评论:0

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
}