前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图解LeetCode——856. 括号的分数(难度:中等)

图解LeetCode——856. 括号的分数(难度:中等)

作者头像
爪哇缪斯
发布2023-05-10 11:44:45
1290
发布2023-05-10 11:44:45
举报
文章被收录于专栏:爪哇缪斯爪哇缪斯

一、题目

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

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

二、示例

2.1> 示例 1:

【输入】 "()" 【输出】 1

2.2> 示例 2:

【输入】 "(())" 【输出】 2

2.3> 示例 3:

【输入】 "()()" 【输出】 2

2.4> 示例 4:

【输入】 "(()(()))" 【输出】 6

提示:

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

三、解题思路

根据题目描述,我们需要对字符串s进行解析,并利用堆栈的特点帮助我们进行计算。以下图为例,s = "(()(()))",遍历前两个字符都是‘(’,所以我们将‘(’执行入栈操作。遍历到的第三个字符是‘)’,我们要将栈顶元素弹出,发现可以匹配成一个括号,由于题目描述,一个“()”等于1,所以,我们将字符‘1’入栈。此时堆栈中的元素为['(', '1']。具体操作如下图所示:

我们在继续遍历,由于第4和第5个字符都是‘(’,所以我们直接入栈即可。当遍历到第6个字符的时候,由于是‘)’,所以我们再次执行将栈顶元素踢出堆栈的操作,由于题目描述,一个“()”等于1,所以,我们将字符‘1’入栈。此时堆栈中的元素为['(', '1','(', '1']。具体操作如下图所示:

当遍历到第7个字符的时候,由于是‘)’,所以我们再次执行将栈顶元素踢出堆栈的操作,由于出栈的字符不是‘(’而是‘1’,所以我们继续踢出栈顶元素,此时出栈字符为‘(’,满足匹配题目中描述的(A)2 * A 分的情况,所以计算出来的结果为 2*1 等于2,我们将字符‘2’入栈。此时堆栈中的元素为['(', '1','2']

我们在继续向后遍历,由于第8个字符是‘)’,我们执行栈顶元素出栈操作,由于栈顶和次栈顶元素分别是‘2’和‘1’,都不是‘(’,所以继续执行栈顶出栈操作。然后这次出栈的元素是‘(’,可以匹配成一个括号,同时也满足了题目中描述的 AB 得 A + B 分(A) 得 2 * A 分这两种情况。所以,计算结果为:2 * (1 + 2) 等于 6,在将6入栈。此时堆栈中的元素为['6']。那么遍历s字符串完毕之后,我们将堆栈中所有元素值相加就是最终结果。具体操作,如下图所示:

四、代码实现

代码语言:javascript
复制
class Solution {
    public int scoreOfParentheses(String s) {
        Deque<Character> deque = new ArrayDeque();
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') deque.addLast('(');
            else {
                char c = deque.removeLast();
                if (c == '(') {
                    deque.addLast('1');
                } else {
                    int sum = c - '0';
                    while ((c = deque.removeLast()) != '(')  sum += c - '0';
                    deque.addLast((char) ((sum << 1) + '0'));
                }
            }
        }
        int result = 0;
        while (!deque.isEmpty()) result += deque.removeLast() - '0';
        return result;
    }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目
  • 二、示例
    • 2.1> 示例 1:
      • 2.2> 示例 2:
        • 2.3> 示例 3:
          • 2.4> 示例 4:
            • 提示:
            • 三、解题思路
            • 四、代码实现
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档