博客
关于我
Leetcode: Ternary Expression Parser
阅读量:795 次
发布时间:2023-01-31

本文共 3374 字,大约阅读时间需要 11 分钟。

Given a string representing arbitrarily nested ternary expressions, calculate the result of the expression. You can always assume that the given expression is valid and only consists of digits 0-9, ?, :, T and F (T and F represent True and False respectively).Note:The length of the given string is ≤ 10000.Each number will contain only one digit.The conditional expressions group right-to-left (as usual in most languages).The condition will always be either T or F. That is, the condition will never be a digit.The result of the expression will always evaluate to either a digit 0-9, T or F.Example 1:Input: "T?2:3"Output: "2"Explanation: If true, then result is 2; otherwise result is 3.Example 2:Input: "F?1:T?4:5"Output: "4"Explanation: The conditional expressions group right-to-left. Using parenthesis, it is read/evaluated as:             "(F ? 1 : (T ? 4 : 5))"                   "(F ? 1 : (T ? 4 : 5))"          -> "(F ? 1 : 4)"                 or       -> "(T ? 4 : 5)"          -> "4"                                    -> "4"Example 3:Input: "T?T?F:5:3"Output: "F"Explanation: The conditional expressions group right-to-left. Using parenthesis, it is read/evaluated as:             "(T ? (T ? F : 5) : 3)"                   "(T ? (T ? F : 5) : 3)"          -> "(T ? F : 3)"                 or       -> "(T ? F : 5)"          -> "F"                                    -> "F"

My First Solution:

Use Stack and String operation, from the back of the string, find the first '?', push the right to stack. Depends on whether the char before '?' is 'T' or 'F', keep the corresponding string in the stack

1 public class Solution { 2     public String parseTernary(String expression) { 3         Stack
st = new Stack
(); 4 int pos = expression.lastIndexOf("?"); 5 while (pos > 0) { 6 if (pos < expression.length()-1) { 7 String str = expression.substring(pos+1); 8 String[] strs = str.split(":"); 9 for (int i=strs.length-1; i>=0; i--) {10 if (strs[i].length() > 0)11 st.push(strs[i]);12 }13 }14 String pop1 = st.pop();15 String pop2 = st.pop();16 if (expression.charAt(pos-1) == 'T') st.push(pop1);17 else st.push(pop2);18 expression = expression.substring(0, pos-1);19 pos = expression.lastIndexOf("?");20 }21 return st.pop();22 }23 }

Better solution, refer to https://discuss.leetcode.com/topic/64409/very-easy-1-pass-stack-solution-in-java-no-string-concat/2

No string contat/substring operation

1 public String parseTernary(String expression) { 2     if (expression == null || expression.length() == 0) return ""; 3     Deque
stack = new LinkedList<>(); 4 5 for (int i = expression.length() - 1; i >= 0; i--) { 6 char c = expression.charAt(i); 7 if (!stack.isEmpty() && stack.peek() == '?') { 8 9 stack.pop(); //pop '?'10 char first = stack.pop();11 stack.pop(); //pop ':'12 char second = stack.pop();13 14 if (c == 'T') stack.push(first);15 else stack.push(second);16 } else {17 stack.push(c);18 }19 }20 21 return String.valueOf(stack.peek());22 }

 

转载地址:http://gmgyk.baihongyu.com/

你可能感兴趣的文章
laravel 部署 file_put_contents failed to open stream: No such file or directory
查看>>
Laravel5.5 集成 mPDF
查看>>
laravel5.5中添加对分页样式的修改上一页和下一页
查看>>
Laravel5.5开发规范 [ 个人总结 ]
查看>>
laravel5.5数据库迁移入门实践
查看>>
Laravel5.5添加新路由文件并制定规则
查看>>
laravel5.5组件之 Forms & HTML 组件 (laravelcollective/html)
查看>>
Laravel5.5集成七牛云上传、管理(删除、查询)
查看>>
Laravel5.5集成极光推送_解决推送失败重推问题
查看>>
laravel中composer镜像服务的方式
查看>>
Laravel前后台+API路由分离架构(完善)
查看>>
Laravel渴求式加载
查看>>
Laravel集合探学系列——添加扩展macro策略(一)
查看>>
Laravel项目宝塔部署全攻略:从0到1的实战指南
查看>>
laravl 文件存储云存储
查看>>
LARGE_INTEGER
查看>>
Lasso回归_ElasticNet回归_PolynomialFeatures算法介绍_01---人工智能工作笔记0032
查看>>
LaTeX 在线编辑器(LaTeX online editors)
查看>>
latex不能识别eps图片
查看>>
LaTeX介绍-ChatGPT4o作答
查看>>