刷完LeetCode题库——856. 括号的分数

130 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

题目详情

LeetCode题库序号 856. 括号的分数 ,难度为 中等

Tag : 「栈」

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

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

示例 1:

输入: "()"
输出: 1

示例 2:

输入: "(())"
输出: 2

示例 3:

输入: "()()"
输出: 2

示例 4:

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

提示:

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

题解思路: 字符串中只包含了( 和 ),括号中有对应的得分机制,那么我们可以使用栈的特性。首先,开头我们先插入一个0值,我们遍历整个字符串,假如遇到(元素的话,就向栈中插入0,如果遇到)括号时,就弹出一个元素,使用假设其中没有元素那么就得0,假设有元素那么就需要乘以2,使用Math.max(2 * num, 1)可以完美解决,剩下的就是加上旁边的值即可,最后push回栈中,题目解法详情见以下代码:

题解代码

class Solution {
    public int scoreOfParentheses(String s) {
        Deque<Integer> stack = new ArrayDeque<>();
        stack.push(0);
        for (int i = 0; i < s.length(); i++) {
            if ('(' == s.charAt(i)) {
                stack.push(0);
            } else {
                int num = stack.pop();
                int sum = stack.pop() + Math.max(2 * num, 1);
                stack.push(sum);
            }
        }

        return stack.peek();
    }
}

结尾

我的"刷完LeetCode题库"系列文章的第 No.856. 括号的分数 序号的题目,本次刷题之旅系列开始于 2022-06-12,因为LeetCode上部分是有锁题,我自己的目标是将先把所有不带锁的题目刷完。自己能够通过这次刷题之旅勉励自己,并且提升逻辑思维能力。这个系列的文章就是会见证我自己的一个成长过程!

思路虽然不是最优的,但是我会尽我所能!

为了让我自己的刷题之旅不中断,我特地建立了相关的仓库,来记录我自己的刷题之旅。 github.com/jackpan123/…