856. Score of Parentheses

2019-05-25 09:55:33 浏览数 (1)

思路 用一个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;
    }
};

0 人点赞