题目名称

直接看的题解,具体算法还是没能理解透彻

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

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

示例

输入: “(()(()))”
输出: 6

题解

题解

以 “(()(()))” 为例
i = 0 stack = [0, 0]
i = 1 stack = [0, 0, 0]
i = 2 stack = [0, 1]
i = 3 stack = [0, 1, 0]
i = 4 stack = [0, 1, 0, 0]
i = 5 stack = [0, 1, 1]
i = 6 stack = [0, 3]
i = 7 stack = [6]

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* @param {string} s
* @return {number}
*/
var scoreOfParentheses = function(s) {
let stack = [0]
for(let i = 0; i < s.length; i++) {
if(s[i] === "(") {
stack.push(0)
} else {
let v = stack.pop()
let deep = stack.pop() + Math.max(2 * v, 1)
stack.push(deep)
}
}
return stack[0]
};