Score of Parentheses
Description
Given a balanced parentheses string S
, compute the score of the string based on the following rule:
()
has score 1AB
has scoreA + B
, where A and B are balanced parentheses strings.(A)
has score2 * A
, where A is a balanced parentheses string.
Example 1:
Input: "()" Output: 1
Example 2:
Input: "(())" Output: 2
Example 3:
Input: "()()" Output: 2
Example 4:
Input: "(()(()))" Output: 6
Note:
S
is a balanced parentheses string, containing only(
and)
.2 <= S.length <= 50
Solution(javascript)
/**
* @param {string} S
* @return {number}
*/
const scoreOfParentheses = function (S) {
const stack = []
for (const c of S) {
stack.push(c)
while (stack[stack.length - 1] === ')') {
stack.pop() // ")"
if (stack[stack.length - 1] === '(') {
stack.pop() // "("
stack.push(1)
} else {
let num = stack.pop()
while (stack[stack.length - 1] >= 1) {
num += stack.pop()
}
stack.pop() // "("
stack.push(2 * num)
}
}
}
return stack.reduce((acc, a) => acc + a, 0)
}