跳转至

解析布尔表达式⚓︎

Leetcode题目链接

描述⚓︎

详见中文题目链接

解答⚓︎

class Solution {
public:
    bool parseBoolExpr(string expression) {
        stack<int> stk;
        for (const char& ch : expression) {
            if (ch == ')') {
                unordered_set<char> s;
                while (stk.top() != '(') {
                    s.insert(stk.top()); stk.pop();
                }
                stk.pop();  // pop '('
                char op = stk.top(); stk.pop();
                if (op == '&') {
                    stk.push(s.count('f') ? 'f' : 't');
                } else if (op == '|') {
                    stk.push(s.count('t') ? 't' : 'f');
                } else { // op == '!'
                    stk.push(s.count('t') ? 'f' : 't');
                }
            } else if (ch != ',') {
                stk.push(ch);
            }
        }
        return stk.top() == 't';
    }
};