856括号的分数

856括号的分数

  • 又是万恶的括号题!但是思路差不多

  • 如果是左括号,那么入栈,用0模拟

  • 如果是右括号,那么判断栈顶是不是等于0
    • 如果等于0,那么就加一分,0出栈,1入栈
    • 如果不等于0,说明中间含有数字。那么就把中间的数字全部取出来,计算出他们的和
    • 因为不管中间是多少数字,还是要和(匹配的,所以最后还要pop,然后把和的两倍入栈

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<bits/stdc++.h>
using namespace std;

class Solution {
public:
int scoreOfParentheses(string S) {
stack<int>s;
for(auto c:S)
{
if(c=='(')
s.push(0);
else
{
if(s.top()==0)
{
s.pop();
s.push(1);
}else{
int temp = 0;
while(s.top()!=0)
{
temp+=s.top();
s.pop();
}
s.pop();
s.push(temp*2);
}
}
}
int ans = 0;
while(!s.empty())
{
ans+=s.top();
s.pop();
}
return ans;
}
};
-------------本文结束,感谢您的阅读-------------