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

() 得 1 分。

AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。

(A) 得 2 * A 分,其中 A 是平衡括号字符串。


示例 1:

输入: "()"

输出: 1

示例 2:

输入: "(())"

输出: 2

示例 3:

输入: "()()"

输出: 2

示例 4:

输入: "(()(()))"

输出: 6


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

构建一个栈
如果遇到(就往栈里面添加
如果遇到)就去寻找最近的左括号抵消,同时计算里面的分数
拿(()(()))示例, 栈结构变化如下


[(] # 遇到 ( 往栈添加
[(, (] # 继续添加
[(, 1] # 遇到 ) 合成一个1
[(, 1, (] # 遇到 ( 往栈添加
[(, 1, (, (] # 继续添加
[(, 1, (, 1] # 遇到 ) 合成一个1
[(, 1, 2] # 遇到 ) ,结构就是(1), 所以计算的话是 1 * 2
[6] # 遇到 ) ,结构是(1,2), 所以计算的话是 (1 + 2) * 2

var scoreOfParentheses = function(S) {
var stack = []
for (var i = 0; i < S.length; i++) {
if (S[i] === '(') stack.push('(')
if (S[i] === ')') {
if (stack[stack.length - 1] === '(') {
stack.pop()
stack.push(1)
} else {
var a = stack.pop()
var temp = 0
while(a !== '(') {
temp += a
a = stack.pop()
}
stack.push(2 * temp)
}
}
}
var sum = 0
stack.forEach(item => sum += item)
return sum
}

作者:finnwu
链接:https://leetcode-cn.com/problems/score-of-parentheses/solution/kan-bu-dong-bie-ren-de-ti-jie-zi-ji-you-xie-liao-y/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。