给定一个平衡括号字符串 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)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。