前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 439. 三元表达式解析器

LeetCode 439. 三元表达式解析器

作者头像
Michael阿明
发布2021-02-19 10:48:08
6720
发布2021-02-19 10:48:08
举报
文章被收录于专栏:Michael阿明学习之路

文章目录

1. 题目

给定一个以字符串表示的任意嵌套的三元表达式,计算表达式的值。

你可以假定给定的表达式始终都是有效的并且只包含数字 0-9, ?, :, T 和 F (T 和 F 分别表示真和假)。

注意: 给定的字符串长度 ≤ 10000。 所包含的数字都只有一位数。 条件表达式从右至左结合(和大多数程序设计语言类似)。 条件是 T 和 F其一,即条件永远不会是数字。 表达式的结果是数字 0-9, T 或者 F

代码语言:javascript
复制
示例 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 递归

两种符号? :数量相等的时候,将字符串切开,递归考虑

代码语言:javascript
复制
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 找符号
  • 把后面的数压栈,把前面的数更新为表达式的值,并弹栈
代码语言:javascript
复制
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]);
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
    • 2.1 递归
      • 2.2 循环
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档