LeetCode 439. 三元表达式解析器
文章目录
- 1. 题目
- 2. 解题
- 2.1 递归
- 2.2 循环
1. 题目
给定一个以字符串表示的任意嵌套的三元表达式,计算表达式的值。
你可以假定给定的表达式始终都是有效的并且只包含数字 0-9, ?, :, T 和 F
(T 和 F 分别表示真和假)。
注意:
给定的字符串长度 ≤ 10000。
所包含的数字都只有一位数。
条件表达式从右至左结合(和大多数程序设计语言类似)。
条件是 T 和 F其一,即条件永远不会是数字。
表达式的结果是数字 0-9, T 或者 F
。
示例 1:
输入: "T?2:3"
输出: "2"
解释: 如果条件为真,结果为 2;否则,结果为 3。示例 2:
输入: "F?1:T?4:5"
输出: "4"
解释: 条件表达式自右向左结合。使用括号的话,相当于:"(F ? 1 : (T ? 4 : 5))" "(F ? 1 : (T ? 4 : 5))"-> "(F ? 1 : 4)" 或者 -> "(T ? 4 : 5)"-> "4" -> "4"示例 3:
输入: "T?T?F:5:3"
输出: "F"
解释: 条件表达式自右向左结合。使用括号的话,相当于:"(T ? (T ? F : 5) : 3)" "(T ? (T ? F : 5) : 3)"-> "(T ? F : 3)" 或者 -> "(T ? F : 5)"-> "F" -> "F"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ternary-expression-parser
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
2.1 递归
两种符号? :
数量相等的时候,将字符串切开,递归考虑
class Solution {public:string parseTernary(string expression) {int c1 = 0, c2 = 0, n = expression.size();for(int i = 1; i < n; ++i){if(expression[i]=='?')c1++;else if(expression[i]==':')c2++;if(c1 == c2){return expression[0]=='T' ? parseTernary(expression.substr(2, i-2)) : parseTernary(expression.substr(i+1));}}return expression;}
};
2.2 循环
- 参考评论区解答
- 逆序遍历,每次 i - 2 找符号
:
把后面的数压栈,?
把前面的数更新为表达式的值,并弹栈
class Solution {public:string parseTernary(string expression) {stack<char> s1;for(int i = expression.length() - 1; i >= 2; i -= 2)//找?或者:{if(expression[i-1] == ':')//当前是 :s1.push(expression[i]);else//当前是?{expression[i-2] = expression[i-2] == 'T' ? expression[i] : s1.top();// ? 前面 更新为表达式的值s1.pop();}}return string(1,expression[0]);}
};
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 439. 三元表达式解析器相关推荐
- 439 三元表达式解析器
题目描述: 给定一个以字符串表示的任意嵌套的三元表达式,计算表达式的值.你可以假定给定的表达式始终都是有效的并且只包含数字 0-9, ?, :, T 和 F (T 和 F 分别表示真和假). 注意: ...
- 表达式解析器(MVEL)
Jeval 在运行时解析计算静态和动态表达式:支持数学,布尔,字符串,函数表达式:支持大部分的数学和布尔运算符:支持自定义函数:支持嵌套函数:支持解析:支持自定义变量解析器: 官网:http://je ...
- 数学表达式解析器简介
2019独角兽企业重金招聘Python工程师标准>>> 在实际项目开发中如果需要解析数学公式,无须再运用解释器模式进行设计,可以直接使用一些第三方解析工具包,它们可以统称为数学表达式 ...
- AWS Lambda中的Cron表达式解析器
目录 介绍 解释代码 解析函数 特别案例 AWS设置 AWS Lambda AWS API网关 AWS Amplify 下载 index.html - 884 B 下载 index.js ...
- Postgresql源码(85)查询执行——表达式解析器分析(select 1+1如何执行)
相关 <Postgresql源码(61)查询执行--最外层Portal模块> <Postgresql源码(62)查询执行--子模块ProcessUtility> <Pos ...
- LeetCode 1678. 设计 Goal 解析器
文章目录 1. 题目 2. 解题 1. 题目 请你设计一个可以解释字符串 command 的 Goal 解析器 . command 由 "G"."()" 和/或 ...
- LeetCode 1410. HTML 实体解析器(哈希map)
1. 题目 「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体. HTML 里这些特殊字符和它们对应的字符实体包括: 双引号:字符实体 ...
- 表达式解析器Mvel2.0(MVFLEX Expression Language)
时间过的好快,突然就发现,已经过去一两年了,这一两年博客也写的不多,快要进入中年了,最重要的就是自律.要好好睡觉,好好学习,好好工作. 废话不多说,这次给大家说的是 表达式语言解析Mvel2.0 简介 ...
- LeetCode 5382. HTML 实体解析器
5382. HTML 实体解析器 class Solution:def entityParser(self, text: str) -> str:text = text.replace('&qu ...
最新文章
- fcm算法c语言实现,基于特征权重的FCM算法研究及应用
- python编程做什么工作-学习Python编程后在成都可以做哪些工作?
- 洛谷 P2888 [USACO07NOV]牛栏Cow Hurdles
- timestamp 转换 date mysql_MySQL时间函数 | 时间戳和日期之间得转换
- rem布局 html,移动端h5之rem布局/px2rem
- ef 连接localdb_如何连接和使用Microsoft SQL Server Express LocalDB
- 选择条件WD_SELECT_OPTIONS_20
- 实体框架 6.0:异步、IQueryable操作符和特性改进
- FTP 简介与 Windows 系统搭建 FTP 服务器
- Linux宝库快讯 | OpenStack中国日更名OpenInfra中国日
- linux常用的搜索命令
- Python实现IP地址归属地查询
- java怎么实现复杂的考勤计算_考勤系统之计算工作小时数
- kettle复杂表头的Excel数据源处理
- Python发送QQ邮件常见报错和代码
- 2020牛客寒假算法基础集训营3 B	牛牛的DRB迷宫II二进制详解
- 教务管理系统(免费源码获取)
- mpv官方文档部分快捷键
- Consolas和微软雅黑混合字体
- C++/数据结构——课程设计——回合制对战小游戏