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
题目链接:https://leetcode.com/problems/score-of-parentheses/
题目分析:主要关注嵌套的情况,每多一层嵌套,答案就多乘2,用栈维护'(',当经过若干'('遇到第一个')'时,设此时栈内元素个数为n,则答案加上2^(n-1),之后连续的')'不需计算(因为其属于最内层的嵌套部分),实际上已包含在2^(n-1)中
2ms 击败100%
class Solution {
public int scoreOfParentheses(String S) {
int ans = 0, top = 0, len = S.length();
int[] stk = new int[len + 1];
boolean firstRight = true;
for (int pos = 0; pos < len; pos++) {
if (S.charAt(pos) == '(') {
stk[++top] = '(';
firstRight = true;
} else {
if (firstRight) {
ans += 1 << (top - 1);
}
firstRight = false;
top--;
}
}
return ans;
}
}