1106. 解析布尔表达式 DFS
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相关推荐
- Leetcode编程C++之1106. 解析布尔表达式
Leetcode编程C++之1106. 解析布尔表达式 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: " ...
- 【1106. 解析布尔表达式】
来源:力扣(LeetCode) 描述: 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: "t", ...
- 【力扣】1106. 解析布尔表达式(C++/Go 栈的应用)
题目链接 题意 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: "t",运算结果为 True & ...
- 力扣:1106. 解析布尔表达式
给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: "t",运算结果为 True "f&q ...
- 1106. 解析布尔表达式
题目: 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: "t",运算结果为 True " ...
- Java编程实战7:解析布尔表达式
目录 解析布尔表达式 题目 示例 1 示例 2 示例 3 示例 4 提示 解答 解题思路 完整代码 解析布尔表达式 题目 给你一个以字符串形式表述的 布尔表达式(boolean) expression ...
- 递归解析之DFS全排列
前言 通过上一篇文章<return None来看递归函数流程解析>了解了递归函数的调用及执行之后,来看看如何应用吧.本篇文章将以DFS算法实现全排列为例,加深对递归的理解,顺便看看DFS算 ...
- 算法练习-解析布尔表达式
题目描述:(题目来源:LeetCode) 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: "t" ...
- Leetcode cn 解析布尔表达式
给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果. 有效的表达式需遵循以下约定: "t",运算结果为 True "f&q ...
最新文章
- 修改mysql+io算法_MySQL磁盘IO设置问题
- 深度学总结:CNN Decoder, Upsampling的处理
- VS2012 +PTVS配置
- Swift 文档读后随写
- 我的python学习笔记全集_我的python学习笔记
- layui数据表格获取当前页数
- Redis高可用方案哨兵机制------ 配置文件sentinel.conf详解
- MySQL下实现先排序后分组查询(问题记录)
- 利用truffle与智能合约进行交互
- js 异步执行_js执行机制:同步与异步(宏任务与微任务)
- Spark数据分析技术学习笔记(三)——Spark累加器
- ###Tomcat目录介绍和基础
- MongoVUE 使用教程
- 云服务器1M带宽表示什么意思,购买服务器时如何选择服务器带宽?
- 解决U盘使用DVD镜像安装Fedora15需要联网的问题
- vector访问失效的问题
- 雷神笔记本做java,详细爆料雷神911Air星战三代 15.6寸笔记本好不好用?怎么样呢?大神吐槽真心话...
- php对参数校验(名称、地址、掩码、日期、时间、端口)
- 电脑桌面右键无新建选项
- PDF转Excel表格怎么转换?这个方法其实很简单
热门文章
- Golang 中 sync/atomic 包的原子操作
- 寻声定位 matlab,【图片】一款暖色调的单核AK4497平价播放器小评-寻声饭盒FA3初烧精品【耳机吧】_百度贴吧...
- 惊!面试现场,简单几道java算法题,90%程序员没写出来
- JAVA学习笔记(二十)
- 搭建神经网络实现简单图片分类
- SAPUI5入门到精通4--开发者工具的使用(Eclipse,Web IDE, EditPlus3,webstorm....... )
- 【Protobuf】Protobuf下载安装和.proto文件定义
- 什么是SAP?它有什么作用!
- 自定义error、北京污染物数据处理、可视化
- Schnorr签名介绍