博客
关于我
Leetcode: Ternary Expression Parser
阅读量:806 次
发布时间: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/

你可能感兴趣的文章
MySQL必知必会总结笔记
查看>>
MySQL快速入门——库的操作
查看>>
mysql快速复制一张表的内容,并添加新内容到另一张表中
查看>>
mysql怎么删除临时表里的数据_MySQL中关于临时表的一些基本使用方法
查看>>
mysql性能测试工具选择 mysql软件测试
查看>>
MySQL慢查询-开启慢查询
查看>>
MySQL慢查询日志总结
查看>>
MySQL慢查询问题排查
查看>>
mysql截取sql语句
查看>>
mysql手工注入
查看>>
Mysql执行update by id的过程
查看>>
mysql执行计划
查看>>
MySQL执行计划 EXPLAIN参数
查看>>
MySQL执行计划【explain】,看这一篇就够啦!
查看>>
Mysql执行计划字段解释
查看>>
mysql执行计划怎么看
查看>>
MySQL执行计划解读
查看>>
mysql执行顺序与索引算法
查看>>
mysql批量update优化_Mysql中,21个写SQL的好习惯,你值得拥有呀
查看>>
mysql技能梳理
查看>>