856. 括号的分数

94 阅读1分钟

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

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

示例 1:

输入: "()"
输出: 1

示例 2:

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

示例 3:

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

示例 4:

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

题解

/**
 * @param {string} s
 * @return {number}
 */
var scoreOfParentheses = function (s) {
    const stack = []
    for (let i = 0; i < s.length; i++) {
        // 遇到'('存入栈内
        if (s[i] == '(') stack.push(s[i])
        if (s[i] == ')') {
            // 当遇到')'时 先判断栈顶元素如果是'('时,
            // 说明是连续的闭合括号,栈顶出栈同时向栈内存入1
            if (stack[stack.length - 1] == '(') {
                stack.pop()
                stack.push(1)
            } else {
                // 当遇到')'时 先判断栈顶元素如果不是'('时,==> (1, 2) ==> 2 * (1 + 2)
                // 说明是数组,记录栈顶出栈,遍历做累加
                // 最后向栈内存入2 * res
                let a = stack.pop()
                let res = 0
                while (a != '(') {
                    res += a
                    a = stack.pop()
                }
                stack.push(2 * res)
            }
        }
    }
    // 遍历栈内数
    let sum = 0
    stack.forEach(item => sum += item)
    return sum
};

 

来源:力扣(LeetCode)

链接:leetcode.cn/problems/sc…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。