1106. 解析布尔表达式

1106. 解析布尔表达式

给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果。

有效的表达式需遵循以下约定:

  • "t",运算结果为 True
  • "f",运算结果为 False
  • "!(expr)",运算过程为对内部表达式 expr 进行逻辑 非的运算(NOT)
  • "&(expr1,expr2,...)",运算过程为对 2 个或以上内部表达式 expr1, expr2, ... 进行逻辑 与的运算(AND)
  • "|(expr1,expr2,...)",运算过程为对 2 个或以上内部表达式 expr1, expr2, ... 进行逻辑 或的运算(OR)

原本看到困难还比较发愁,但看了下题。挺直白的一道模拟题。总之看到括号用栈就对了。。这难度就虚高的离谱,感觉昨天那道数学题是真的想不出来

class Solution {
public:
    bool parseBoolExpr(string expression) {
        stack<char>st;
        for(auto ch:expression){
            if(ch==',') continue;
            else if(ch!=')') st.push(ch);
            else{
                int t=0,f=0;
                while(st.top()!='('){
                    if(st.top()=='t')   t++;
                    else f++;
                    st.pop();
                }
                //cout<<t<<" "<<f<<endl;
                st.pop();
                //cout<<st.top()<<endl;
                char option=st.top();
                st.pop();
                if(option=='!')   st.push(t==1?'f':'t');
                else if(option=='&') st.push(f==0?'t':'f');
                else if(option=='|') st.push(t>0?'t':'f');
            }
        }
        return st.top()=='t';
    }
};
posted @ 2022-11-05 15:12  认真游泳的鱼  阅读(37)  评论(0)    收藏  举报