1106. 解析布尔表达式

给你一个以字符串形式表述的 布尔表达式(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 是以上述形式给出的有效表达式,表示一个布尔值。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/parsing-a-boolean-expression
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

做题结果

成功,表达式切水果,关键是学会划分

方法:DFS+栈

1. 如果直接是t,f就返回

2. 否则说明有括号,取第一个负号,然后去掉外层括号

3. 根据括号配对情况,以及逗号进行分割,此处可以使用栈来记录左括号数目,由于栈中只有一种左括号元素,可使用计数代替栈

4. 根据外层符号进行链接处理,由于与操作有遇到false再进行与操作是false的情况,可根据此判断提前返回; 或操作 true 在进行火,还是true, 也可提前返回

class Solution {public boolean parseBoolExpr(String expression) {if(expression.startsWith("t")) return true;if(expression.startsWith("f")) return false;char first = expression.charAt(0);String item = expression.substring(2,expression.length()-1);List<String> sub = split(item);if(first=='!'){return !(parseBoolExpr(sub.get(0)));}else if(first=='&'){boolean ans = true;for(int i = 0; i < sub.size()&&ans; i++){ans = ans && parseBoolExpr(sub.get(i));}return ans;}boolean ans = false;for(int i = 0; i < sub.size()&&!ans; i++){ans = ans || parseBoolExpr(sub.get(i));}return ans;}private List<String> split(String str){int n = str.length();int j = 0;int left = 0;List<String> ans = new ArrayList<>();for(int i = 0; i < n; i++){char c = str.charAt(i);if(c=='(') ++left;else if(c==')')--left;if(left == 0 && (c==')' || c=='t' || c=='f')){ans.add(str.substring(j,i+1));j = i+2;}}return ans;}}

1106. 解析布尔表达式 DFS相关推荐

  1. Leetcode编程C++之1106. 解析布尔表达式

    Leetcode编程C++之1106. 解析布尔表达式 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: " ...

  2. 【1106. 解析布尔表达式】

    来源:力扣(LeetCode) 描述: 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: "t", ...

  3. 【力扣】1106. 解析布尔表达式(C++/Go 栈的应用)

    题目链接 题意 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: "t",运算结果为 True & ...

  4. 力扣:1106. 解析布尔表达式

    给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: "t",运算结果为 True "f&q ...

  5. 1106. 解析布尔表达式

    题目: 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: "t",运算结果为 True " ...

  6. Java编程实战7:解析布尔表达式

    目录 解析布尔表达式 题目 示例 1 示例 2 示例 3 示例 4 提示 解答 解题思路 完整代码 解析布尔表达式 题目 给你一个以字符串形式表述的 布尔表达式(boolean) expression ...

  7. 递归解析之DFS全排列

    前言 通过上一篇文章<return None来看递归函数流程解析>了解了递归函数的调用及执行之后,来看看如何应用吧.本篇文章将以DFS算法实现全排列为例,加深对递归的理解,顺便看看DFS算 ...

  8. 算法练习-解析布尔表达式

    题目描述:(题目来源:LeetCode) 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: "t" ...

  9. Leetcode cn 解析布尔表达式

    给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: "t",运算结果为 True "f&q ...

最新文章

  1. 修改mysql+io算法_MySQL磁盘IO设置问题
  2. 深度学总结:CNN Decoder, Upsampling的处理
  3. VS2012 +PTVS配置
  4. Swift 文档读后随写
  5. 我的python学习笔记全集_我的python学习笔记
  6. layui数据表格获取当前页数
  7. Redis高可用方案哨兵机制------ 配置文件sentinel.conf详解
  8. MySQL下实现先排序后分组查询(问题记录)
  9. 利用truffle与智能合约进行交互
  10. js 异步执行_js执行机制:同步与异步(宏任务与微任务)
  11. Spark数据分析技术学习笔记(三)——Spark累加器
  12. ###Tomcat目录介绍和基础
  13. MongoVUE 使用教程
  14. 云服务器1M带宽表示什么意思,购买服务器时如何选择服务器带宽?
  15. 解决U盘使用DVD镜像安装Fedora15需要联网的问题
  16. vector访问失效的问题
  17. 雷神笔记本做java,详细爆料雷神911Air星战三代 15.6寸笔记本好不好用?怎么样呢?大神吐槽真心话...
  18. php对参数校验(名称、地址、掩码、日期、时间、端口)
  19. 电脑桌面右键无新建选项
  20. PDF转Excel表格怎么转换?这个方法其实很简单

热门文章

  1. Golang 中 sync/atomic 包的原子操作
  2. 寻声定位 matlab,【图片】一款暖色调的单核AK4497平价播放器小评-寻声饭盒FA3初烧精品【耳机吧】_百度贴吧...
  3. 惊!面试现场,简单几道java算法题,90%程序员没写出来
  4. JAVA学习笔记(二十)
  5. 搭建神经网络实现简单图片分类
  6. SAPUI5入门到精通4--开发者工具的使用(Eclipse,Web IDE, EditPlus3,webstorm....... )
  7. 【Protobuf】Protobuf下载安装和.proto文件定义
  8. 什么是SAP?它有什么作用!
  9. 自定义error、北京污染物数据处理、可视化
  10. Schnorr签名介绍