思路 用一个stack<int>解决问题。用-2表示左括号,-1表示右括号(事实上-1没用上)。 遇到左括号就放入-2(左括号)。 遇到右括号就把栈内的数依次取出,直到遇到-2(左括号)。如果中途没有遇到-2以外的其它数字,就把1放入栈;否则,把取出来的数求和,乘以2,放回栈中。 最后要记得把栈中的数取出求和。 代码
代码语言:javascript复制class Solution {
public:
int scoreOfParentheses(string S) {
// (:-2, ):-1
stack<int> st;
for (int i = 0; i < S.size(); i ) {
char c = S[i];
if (c == '(')
st.push(-2);
else if (c == ')') {
int sum = 0;
int time = 0;
while (!st.empty()) {
int top = st.top();
if (top == -2) { // is left brace.
st.pop();
if (time == 0)
st.push(1);
else
st.push(sum * 2);
break;
} else {
st.pop();
sum = top;
time ;
}
}
}
}
int res = 0;
while (!st.empty()) {
int top = st.top();
st.pop();
res = top;
}
return res;
}
};