首页 > 其他分享 >Leetcode第1106题:解析布尔表达式(Parsing a boolean expression)

Leetcode第1106题:解析布尔表达式(Parsing a boolean expression)

时间:2022-11-05 18:45:12浏览次数:61  
标签:运算符 top stk 1106 括号 boolean Parsing expression 表达式

解题思路

看到表达式求解,自然想到栈。
从左至右遍历布尔表达式expression,对于不同类型字符,进行不同操作:

  • 逗号,,跳过该字符;
  • 不是逗号,和右括号),入栈;
  • 如果是右括号),则一个表达式遍历结束,需要解析该表达式的值,并将结果入栈
  1. 出栈,直到栈顶元素是左括号(,然后将左括号(和运算符出栈,记录弹出的tf的个数;
  2. 计算tf的表达式值:
    2.1 运算符是!,表达式的值为括号内的值取反,因此当f的个数为1时表达式的值为t,否则为f
    2.2 运算符是&,当括号内的所有值都是t时结果是t,否则结果是f
    2.3 运算符是|,当括号内至少有一个值是t时结果是t,否则是f

遍历结束后,栈内只有一个字符tf,返回相应值即可。

核心代码如下:

class Solution {
public:
    bool parseBoolExpr(string expression) {
        stack<char> stk;
        int n = expression.size();
        for (int i = 0; i < n; i++) {
            char c = expression[i];
            if (c == ',') {
                continue;
            } else if (c != ')') {
                stk.push(c);
            } else {
                int t = 0, f = 0;
                while (stk.top() != '(') {
                    char val = stk.top();
                    stk.pop();
                    if (val == 't') {
                        t++;
                    } else {
                        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 ? 't' : 'f');
                    break;
                default:
                    break;
                }
            }
        }
        return stk.top() == 't';
    }
};

标签:运算符,top,stk,1106,括号,boolean,Parsing,expression,表达式
From: https://www.cnblogs.com/hql5/p/16860819.html

相关文章

  • 1106. 解析布尔表达式
    1106.解析布尔表达式给你一个以字符串形式表述的 布尔表达式(boolean)expression,返回该式的运算结果。有效的表达式需遵循以下约定:"t",运算结果为True"f",运算结果为......
  • MyBatis--判断boolean类型实现动态sql--方法/实例
    简介        本文介绍MyBatis如何判断boolean类型实现动态sql。        使用MyBatis时,有时需要使用if标签判断boolean类型,从而决定是否拼接sql(动态查询)。代......
  • [LeetCode] 1106. 解析布尔表达式
    思路从题目中可以得出,一个表达式是通过n(n>=1)个表达式并列、嵌套而成。其实很像前缀表达式。这样我们很容易想到通过递归的方式来做,递归的边界条件就是"t"或者"f"......
  • 1106. 解析布尔表达式
    1106.解析布尔表达式classSolution{intindex;char[]ch;publicbooleanparseBoolExpr(Stringexpression){ch=expression.toCharArray(......
  • String,Number,Boolean
    String<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content=......
  • 关于Vue脚手架的 Parsing error: No Babel config file detected for 报错
    具体报错Parsingerror:NoBabelconfigfiledetectedforE:\web\src\App.vue.EitherdisableconfigfilecheckingwithrequireConfigFile:false,orconfigureB......
  • IfcBoolean
    IfcBoolean类型定义IfcBoolean是定义的简单数据类型Boolean的数据类型。这是必需的,因为选择类型(IfcSimpleValue)不能在其选择列表中直接包含简单类型。布尔类型的值可以为......
  • 1106 2019数列——15分
    把2019各个数位上的数字2、0、1、9作为一个数列的前4项,用它们去构造一个无穷数列,其中第n(>4)项是它前4项之和的个位数字。例如第5项为2,因为2+0+1+9=12,个位数是......
  • android程序报错Attempt to invoke virtual method 'boolean java.lang.String.equals
    android程序报错运行报以下错误:Attempttoinvokevirtualmethod'booleanjava.lang.String.equals(java.lang.Object)'onanullobjectreference可能原因:1、可能布......
  • JavaScript Boolean(布尔) 对象
    Boolean对象:用于转换一个不是Boolean类型的值转换为Boolean类型值(true或者false).Boolean对象属性:constructor:返回对创建此对象的Boolean函数的引用prototype......