题目描述
给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:
- () 得 1 分。
 
- AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。
 
- (A) 得 2 * A 分,其中 A 是平衡括号字符串。
 
示例
示例1
示例2
示例3
示例4
提示
- S是平衡括号字符串,且只含有 ( 和 ) 。
 
- 2 <= S.length <= 50
 
解题思路
这道题我是看了讨论区别人的解法后做出来的。
开始我思路也是用栈,不过我想的是用两个栈,不过没有思考出一个具体的思路。下面代码这个思路比较巧妙和简单,值得借鉴。
解题代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
   | class Solution {     public int scoreOfParentheses(String S) {         Stack<Integer> stack = new Stack<>();         for (char c : S.toCharArray()) {             if (c == '(') {                 stack.push(-1);             } else {                 int cur = 0;                 while (stack.peek() != -1) {                     cur += stack.pop();                 }                 stack.pop();                 stack.push(cur == 0 ? 1 : cur * 2);             }         }         int sum = 0;         while (!stack.isEmpty()) {             sum += stack.pop();         }         return sum;     } }
  |