leetcode 856. 括号的分数

给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:

() 得 1 分。
AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。
(A) 得 2 * A 分,其中 A 是平衡括号字符串。
 

示例 1:

输入: "()"
输出: 1
示例 2:

输入: "(())"
输出: 2
示例 3:

输入: "()()"
输出: 2
示例 4:

输入: "(()(()))"
输出: 6
 

提示:

S 是平衡括号字符串,且只含有 ( 和 ) 。
2 <= S.length <= 50

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/score-of-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    public int scoreOfParentheses(String s) {
        Stack<Integer> stack =  new Stack<>();
        char[] arr = s.toCharArray();
        int length = s.length();
        for (int i = 0; i < length; i++) {
            char c = arr[i];
            if (c == '(') {
                stack.push(0);
            } else {
                if (stack.peek() == 0) {
                    stack.pop();
                    stack.push(1);
                } else {
                    int sum = 0;
                    int value;
                    while ((value = stack.pop()) != 0) {
                        sum += value;
                    }
                    stack.push(sum << 1);
                }
            }
        }
        int sum = 0;
        while (!stack.isEmpty()) {
            sum += stack.pop();
        }
        return sum;
    }

posted @ 2021-06-13 20:05  旺仔古李  阅读(45)  评论(0编辑  收藏  举报