856. Score of Parentheses

思路
用一个stack解决问题。用-2表示左括号,-1表示右括号(事实上-1没用上)。
遇到左括号就放入-2(左括号)。
遇到右括号就把栈内的数依次取出,直到遇到-2(左括号)。如果中途没有遇到-2以外的其它数字,就把1放入栈;否则,把取出来的数求和,乘以2,放回栈中。
最后要记得把栈中的数取出求和。
代码

class Solution {
public:
    int scoreOfParentheses(string S) {
        // (:-2, ):-1
        stack 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;
    }
};

你可能感兴趣的:(856. Score of Parentheses)