给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:
() 得 1 分。 AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。 (A) 得 2 * A 分,其中 A 是平衡括号字符串。
示例 1:
输入: "()" 输出: 1 示例 2:
输入: "(())" 输出: 2 示例 3:
输入: "()()" 输出: 2 示例 4:
输入: "(()(()))" 输出: 6
var scoreOfParentheses = function(S) {
const stack = []
let i = 0
while(i < S.length) {
const cur = S[i]
if (cur === ')') {
let j = stack.length - 1
let str = ''
while(stack.length > 0) {
const pop = stack.pop()
if (pop === '(') {
stack.push(str.length > 0 ? str.repeat(2) : '#')
break;
} else {
str += pop
}
}
} else {
stack.push(cur)
}
i++
}
return stack.join('').length
};
解题思路: 也挺简单的,遇到()就对内部push一个#字符串,运用了0331题目的思维。