
Leetcode: Ternary Expression Parser
初始化栈:使用Deque来实现栈,因为它可以方便地支持弹出元素。 遍历字符串:从右到左遍历字符串中的每个字符。 处理问号:当遇到问号时,弹出栈顶的问号、左边的表达式和右边的表达式。根据当前字符是T还是F,决定保留左边或右边的表达式,将其压入栈中。 处理其他字符:将字符直接压入栈中。 返回结果:栈中的顶部元素即为最终结果。
发布日期:2025-04-05 03:45:35
浏览次数:12
分类:精选文章
本文共 1415 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要计算一个包含嵌套三元表达式的字符串的结果。三元表达式由数字0-9,问号、冒号、T和F组成,其中T表示True,F表示False。表达式是从右到左结合的。我们可以使用栈来模拟这个过程,确保正确处理嵌套结构。
方法思路
我们将字符串从右到左遍历,每遇到一个问号时,弹出栈顶的两个元素,这两个元素分别是左边的表达式和右边的表达式。根据当前字符是T还是F,决定保留哪一个结果,并将其压入栈中。这样,栈中保存的元素将帮助我们正确计算最终结果。
解决代码
import java.util.Deque;import java.util.LinkedList;public class Solution { public String parseTernary(String expression) { if (expression == null || expression.isEmpty()) { return ""; } Dequestack = new LinkedList<>(); for (int i = expression.length() - 1; i >= 0; i--) { char c = expression.charAt(i); if (!stack.isEmpty() && stack.peek() == '?') { stack.pop(); // Pop the question mark char first = stack.pop(); // Pop the left side of the ternary stack.pop(); // Pop the colon char second = stack.pop(); // Pop the right side of the ternary if (c == 'T') { stack.push(first); } else { stack.push(second); } } else { stack.push(c); } } return String.valueOf(stack.peek()); }}
代码解释
这种方法确保了我们能够正确处理右结合的三元表达式,并在O(n)时间复杂度内完成计算,适用于字符串长度不超过10000的情况。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月30日 02时20分58秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Kubernetes网络插件使用详解
2025-04-03
Kubernetes调度单位Pod
2025-04-03
Kubernetes部署Dashboard实战
2025-04-03
Kubernetes集群升级实战
2025-04-03
KuiperInfer深度学习推理框架-源码阅读和二次开发(3):计算图
2025-04-03
KxMenu下拉菜单
2025-04-03
KXML2部分详解(J2ME)
2025-04-03
KXML解释本地或网络上的XML文件
2025-04-03
lambda表达式与匿名内部类与双冒号(::)
2025-04-04
lamp 一键安装
2025-04-04
Lamp(Fpm-Php)基本配置
2025-04-04
laradock 安装使用 kafka
2025-04-04
laravel 5.3 给容器传参
2025-04-04
laravel 5.5 -- Eloquent 模型关联
2025-04-04
laravel mix
2025-04-04
Laravel Passport
2025-04-04
laravel 之 Eloquent 模型修改器和序列化
2025-04-04
Laravel 使用 - artisan schedule使用
2025-04-04