题目描述:
给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:
第一种情况:() 得 1 分。
第二种情况:AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。
第三种情况:(A) 得 2 * A 分,其中 A 是平衡括号字符串。
示例 1:
输入: “()”
输出: 1
示例 2:
输入: “(())”
输出: 2
示例 3:
输入: “()()”
输出: 2
示例 4:
输入: “(()(()))”
输出: 6
解题思路:
- 这道题目主要使用到了压栈弹栈的思想,主要的思路就是遇到左括号就将0的值放入,然后将其分隔开,当前位置如果遇到的是右括号,就判断是满足第一种情况,还有第三种情况,然后取得最大值,加到最后的结果上。
实现代码:
class Solution {
public int scoreOfParentheses(String s) {
Stack<Integer> st = new Stack<Integer>();
st.push(0);
for (int i = 0; i < s.length(); i++) {
//如果遇到左括号就push 0
if (s.charAt(i) == '(') {
st.push(0);
} else {
//否则直接弹出栈顶元素
int v = st.pop();
//计算当气位置的最大值
int top = st.pop() + Math.max(2 * v, 1);
st.push(top);
}
}
return st.peek();
}
}