文章目录

  • 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. 三元表达式解析器相关推荐

  1. 439 三元表达式解析器

    题目描述: 给定一个以字符串表示的任意嵌套的三元表达式,计算表达式的值.你可以假定给定的表达式始终都是有效的并且只包含数字 0-9, ?, :, T 和 F (T 和 F 分别表示真和假). 注意: ...

  2. 表达式解析器(MVEL)

    Jeval 在运行时解析计算静态和动态表达式:支持数学,布尔,字符串,函数表达式:支持大部分的数学和布尔运算符:支持自定义函数:支持嵌套函数:支持解析:支持自定义变量解析器: 官网:http://je ...

  3. 数学表达式解析器简介

    2019独角兽企业重金招聘Python工程师标准>>> 在实际项目开发中如果需要解析数学公式,无须再运用解释器模式进行设计,可以直接使用一些第三方解析工具包,它们可以统称为数学表达式 ...

  4. AWS Lambda中的Cron表达式解析器

    目录 介绍 解释代码 解析函数 特别案例 AWS设置 AWS Lambda AWS API网关 AWS Amplify 下载 index.html - 884 B​​​​​​​ 下载 index.js ...

  5. Postgresql源码(85)查询执行——表达式解析器分析(select 1+1如何执行)

    相关 <Postgresql源码(61)查询执行--最外层Portal模块> <Postgresql源码(62)查询执行--子模块ProcessUtility> <Pos ...

  6. LeetCode 1678. 设计 Goal 解析器

    文章目录 1. 题目 2. 解题 1. 题目 请你设计一个可以解释字符串 command 的 Goal 解析器 . command 由 "G"."()" 和/或 ...

  7. LeetCode 1410. HTML 实体解析器(哈希map)

    1. 题目 「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体. HTML 里这些特殊字符和它们对应的字符实体包括: 双引号:字符实体 ...

  8. 表达式解析器Mvel2.0(MVFLEX Expression Language)

    时间过的好快,突然就发现,已经过去一两年了,这一两年博客也写的不多,快要进入中年了,最重要的就是自律.要好好睡觉,好好学习,好好工作. 废话不多说,这次给大家说的是 表达式语言解析Mvel2.0 简介 ...

  9. LeetCode 5382. HTML 实体解析器

    5382. HTML 实体解析器 class Solution:def entityParser(self, text: str) -> str:text = text.replace('&qu ...

最新文章

  1. fcm算法c语言实现,基于特征权重的FCM算法研究及应用
  2. python编程做什么工作-学习Python编程后在成都可以做哪些工作?
  3. 洛谷 P2888 [USACO07NOV]牛栏Cow Hurdles
  4. timestamp 转换 date mysql_MySQL时间函数 | 时间戳和日期之间得转换
  5. rem布局 html,移动端h5之rem布局/px2rem
  6. ef 连接localdb_如何连接和使用Microsoft SQL Server Express LocalDB
  7. 选择条件WD_SELECT_OPTIONS_20
  8. 实体框架 6.0:异步、IQueryable操作符和特性改进
  9. FTP 简介与 Windows 系统搭建 FTP 服务器
  10. Linux宝库快讯 | OpenStack中国日更名OpenInfra中国日
  11. linux常用的搜索命令
  12. Python实现IP地址归属地查询
  13. java怎么实现复杂的考勤计算_考勤系统之计算工作小时数
  14. kettle复杂表头的Excel数据源处理
  15. Python发送QQ邮件常见报错和代码
  16. 2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II二进制详解
  17. 教务管理系统(免费源码获取)
  18. mpv官方文档部分快捷键
  19. Consolas和微软雅黑混合字体
  20. C++/数据结构——课程设计——回合制对战小游戏

热门文章

  1. virtual析构函数的作用?
  2. 将Source Insight里面着色代码拷贝到word里面的方法
  3. Django form choices, placeholder
  4. 解决克隆clone github 仓库速度过慢的问题
  5. java基础----Java中枚举的使用(一)
  6. Unity之CharacterController2D学习笔记(1)——基础使用
  7. linux的几个文本内容查看命令小结
  8. PHP上传文件大小限制的问题(转)
  9. Windows Phone 资源管理与换肤思考
  10. 编写Web前端代码的注意事项