LeetCode 856.括号的分数
思路
一道栈模拟题,可以将()
看作栈的运算操作指令,按照规则,每次遇到(
时压入一个数字0占位,而遇到)
时则取出栈顶元素,进行分类讨论:
- 如果栈顶元素为0,则说明前一输入内容就是
(
,因此按照规则直接+1即可 - 如果栈顶元素不为0,则说明两个括号之间还包括了其他内容,根据
(A)
的得分规则可知,当前得分就是栈顶元素x2
因此可得到一个综合式子StackTop=StackTop2 + max(StackTop * 2, 1)
,以此为基础即可得解
代码
class Solution {
public int scoreOfParentheses(String s) {
Deque<Integer> d = new ArrayDeque<>();
d.addLast(0);
for(char c:s.toCharArray())
{
if(c=='(')
{
d.addLast(0);
}
else
{
int tmp=d.pollLast();
d.addLast(d.pollLast() + Math.max(tmp * 2, 1));
// System.out.println(d.peekLast());
}
}
return d.pollLast();
}
}