博客
关于我
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事务详解结合MVCC机制的理解
查看>>
MySQL事务隔离级别:读未提交、读已提交、可重复读和串行
查看>>
MySQL事务隔离级别:读未提交、读已提交、可重复读和串行
查看>>
webpack css文件处理
查看>>
mysql二进制包安装和遇到的问题
查看>>
MySql二进制日志的应用及恢復
查看>>
mysql互换表中两列数据方法
查看>>
mysql五补充部分:SQL逻辑查询语句执行顺序
查看>>
mysql交互式连接&非交互式连接
查看>>
MySQL什么情况下会导致索引失效
查看>>
Mysql什么时候建索引
查看>>
MySql从入门到精通
查看>>
MYSQL从入门到精通(一)
查看>>
MYSQL从入门到精通(二)
查看>>
mysql以下日期函数正确的_mysql 日期函数
查看>>
mysql以服务方式运行
查看>>
mysql优化--索引原理
查看>>
MySQL优化之BTree索引使用规则
查看>>
MySQL优化之推荐使用规范
查看>>
Webpack Critical CSS 提取与内联教程
查看>>