力扣856.括号的分数

856.括号的分数

思路:

在这里插入图片描述

  1. 当遇到左括号时,0入栈
  2. 遇到右括号时,若栈顶为0,即栈顶为 左括号,弹出栈顶,1入栈;若栈顶不为0,则代表是(AB)情况,只需 使值相加 直至遇到栈顶为0,即为左括号
  3. 弹出此时栈顶的0,将 (相加的值*2) 入栈,因为是 (AB) 情况
  4. 此时栈中所有元素都是分数,全部求和即可
代码实现
class Solution {
    public int scoreOfParentheses(String s) {
        Stack<Integer> stack = new Stack<>();
        for(char c : s.toCharArray()) {
            if (c == '(') { //如果为左括号,则0进栈
                stack.push(0);
            } else {
                if (stack.peek() == 0) {// 此时匹配到右括号,若栈顶此时为0,即左右括号匹配成功,弹出栈顶, 1入栈
                    stack.pop();
                    stack.push(1);
                } else {
                    int score = 0; //此时栈顶不为0,即是 (AB) 情况
                    while (!stack.isEmpty() && stack.peek() != 0) {
                        score += stack.pop(); //加上 A, B的值,当遇到0时,即左括号终止
                    }
                    stack.pop();//弹出栈顶0
                    stack.push(score << 1);//将 (AB)中的值 *2
                }
            }
        }
        int sum = 0;
        while (!stack.isEmpty()) {
            sum += stack.pop(); //此时栈中所有的都是分数,加上即可
        }
        return sum;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值