持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情
题目详情
LeetCode题库序号 856. 括号的分数 ,难度为 中等。
Tag : 「栈」
给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:
() 得 1 分。 AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。 (A) 得 2 * A 分,其中 A 是平衡括号字符串。
示例 1:
输入: "()"
输出: 1
示例 2:
输入: "(())"
输出: 2
示例 3:
输入: "()()"
输出: 2
示例 4:
输入: "(()(()))"
输出: 6
提示:
S是平衡括号字符串,且只含有(和)。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/… 。