首页 > 其他分享 >1106. 解析布尔表达式

1106. 解析布尔表达式

时间:2022-11-05 20:34:41浏览次数:89  
标签:运算 示例 top stk 1106 expression 表达式 布尔

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

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

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

示例 1:

输入:expression = "!(f)"
输出:true
示例 2:

输入:expression = "|(f,t)"
输出:true
示例 3:

输入:expression = "&(t,f)"
输出:false
示例 4:

输入:expression = "|(&(t,f,t),!(t))"
输出:false
 

提示:

1 <= expression.length <= 20000
expression[i] 由 {'(', ')', '&', '|', '!', 't', 'f', ','} 中的字符组成。
expression 是以上述形式给出的有效表达式,表示一个布尔值。

class Solution {
public:
    bool parseBoolExpr(string expression) {
        stack<char>stk;
        for (int i = 0;i < expression.size();i++){
            char token = expression[i];
            if (token == ','){
                continue;
            }
            else if (token != ')'){
                stk.push(token);
            }
            else{
                int t = 0, f = 0;
                while (stk.top() != '('){
                    char value =  stk.top();
                    stk.pop();
                    if (value == 't'){
                        t++;
                    }
                    if (value == 'f'){
                        f++;
                    }
                }
                stk.pop();
                char op = stk.top();
                stk.pop();
                switch(op){
                    case'!':
                        stk.push(f == 1? 't' : 'f');
                        break;                      
                    case'&':
                        stk.push(f == 0? 't' : 'f');
                        break;
                    case'|':
                        stk.push(t == 0? 'f' : 't');
                        break;
                    defult:
                        break;
                }   
            }
        }
        return stk.top() == 't';
    }
};

 

标签:运算,示例,top,stk,1106,expression,表达式,布尔
From: https://www.cnblogs.com/slowlydance2me/p/16861016.html

相关文章

  • AOP-简介,面向切面编程好处,AOP编程术语,AspectJ(通知类型,切入点表达式)
    AOP概述1.AOP简介AOP(AspectOrientProgramming),面向切面编程。面向切面编程是从动态角度考虑程序运行过程。AOP底层,就是采用动态代理模式实现的。采用了两种代......
  • Leetcode第1106题:解析布尔表达式(Parsing a boolean expression)
    解题思路看到表达式求解,自然想到栈。从左至右遍历布尔表达式expression,对于不同类型字符,进行不同操作:逗号,,跳过该字符;不是逗号,和右括号),入栈;如果是右括号),则一个表......
  • 1106. 解析布尔表达式
    1106.解析布尔表达式给你一个以字符串形式表述的 布尔表达式(boolean)expression,返回该式的运算结果。有效的表达式需遵循以下约定:"t",运算结果为True"f",运算结果为......
  • [LeetCode] 1106. 解析布尔表达式
    思路从题目中可以得出,一个表达式是通过n(n>=1)个表达式并列、嵌套而成。其实很像前缀表达式。这样我们很容易想到通过递归的方式来做,递归的边界条件就是"t"或者"f"......
  • 1106. 解析布尔表达式
    1106.解析布尔表达式classSolution{intindex;char[]ch;publicbooleanparseBoolExpr(Stringexpression){ch=expression.toCharArray(......
  • 内部类和lambda表达式
    如果有一个接口A,A里有eat()抽象方法,想要调用这个抽象方法,用传统模式就要写一个实现类B并重写eat()方法,再创建B对象调用这个方法如果用内部类可以简化代码量先定义两个接口......
  • java正则表达式
    参考:https://www.cnblogs.com/klb561/p/10850803.html1匹配验证-验证Email是否正确publicstaticvoidmain(String[]args){//要验证的字符串Stringstr=......
  • 按照 ExpressionVisitor 抽象类 思路 重新实现表达式 从左到右 递归解析 解决参数编号
     核心递归方法根据表达式类型跳转到具体的处理方法处理完后返回null跳出循环///<summary>///访问///</summary>///<pa......
  • 最全的常用正则表达式大全
    很多不太懂正则的朋友,在遇到需要用正则校验数据时,往往是在网上去找很久,结果找来的还是不很符合要求。所以我最近把开发中常用的一些正则表达式整理了一下,在这里分享一下。......
  • lambda表达式使用局部变量要用final
    为什么Lambda表达式(匿名类)不能访问非final的局部变量呢?  因为实例变量存在堆中,而局部变量是在栈上分配,Lambda表达式(匿名类)会在另一个线程中执行。如果在线程......