856. 括号的分数

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

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

示例 1:
输入: "()"
输出: 1

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

示例 3:
输入: "()()"
输出: 2

示例 4:
输入: "(()(()))"
输出: 6

题解

解1

/**
 * @param {string} S
 * @return {number}
 */
var scoreOfParentheses = function(S) {
    S = S.split('')
    while (S.length > 1) {
        let j = 0
        while (j < S.length - 1) {
            if (S[j] == '(' && S[j + 1] == ')') {
                S[j] = 1
                S.splice(j + 1, 1)
            }
            if (S[j] * 1 == S[j] && S[j + 1] * 1 == S[j + 1]) {
                S[j] += S[j + 1]
                S.splice(j + 1, 1)
            }
            if (S[j] == '(' && S[j + 1] * 1 == S[j + 1] && S[j + 2] == ')') {
                S[j] = S[j + 1] * 2
                S.splice(j + 1, 2)
            }
            j++
        }
    }
    return S[0]
};

解2

/**
 * @param {string} S
 * @return {number}
 */
var scoreOfParentheses = function(S) {
    return eval(S.replace(/\(\)/g,'+1').replace(/\(/g,'+2*('))
};