Given a balanced parentheses string s
, return the score of the string.
The score of a balanced parentheses string is based on the following rule:
"()"
has score1
.AB
has scoreA + B
, whereA
andB
are balanced parentheses strings.(A)
has score2 * A
, whereA
is a balanced parentheses string.
Input: s = "()" Output: 1
Input: s = "(())" Output: 2
Input: s = "()()" Output: 2
2 <= s.length <= 50
s
consists of only'('
and')'
.s
is a balanced parentheses string.
impl Solution {
pub fn score_of_parentheses(s: String) -> i32 {
let mut stack = vec![];
for c in s.chars() {
if c == '(' {
stack.push(0);
} else {
match stack.pop().unwrap() {
0 => stack.push(1),
x => *stack.last_mut().unwrap() = 2 * x,
}
if stack.len() > 1 && stack[stack.len() - 2] > 0 {
let x = stack.pop().unwrap();
*stack.last_mut().unwrap() += x;
}
}
}
stack[0]
}
}