博客
关于我
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/

你可能感兴趣的文章
04-docker-commit构建自定义镜像
查看>>
05-docker系列-使用dockerfile构建镜像
查看>>
09-docker系列-docker网络你了解多少(下)
查看>>
#C8# UVM中的factory机制 #S8.2.3# 重载sequence哪些情形
查看>>
cytoscape安装java_Cytoscape史上最全攻略
查看>>
c语言编写单片机中断,C语言AVR单片机中断程序写法
查看>>
java教学团队管理系统(ssm)
查看>>
java教师管理系统(ssm)
查看>>
java教师课堂助手app(ssm)
查看>>
java教育辅导班信息网(ssm)
查看>>
DDNS动态域名无固定IPSEC配置实战
查看>>
DELL笔记本UEFI+GPT安装window10与Ubuntu双系统
查看>>
EasyUi的使用与代码编写(一)
查看>>
Ehcache Java开源缓存框架
查看>>
el-select下拉框修改背景色
查看>>
ElasticSearch - 基于 JavaRestClient 操作索引库和文档
查看>>
ElasticSearch - 索引库和文档相关命令操作
查看>>
elasticsearch 7.7.0 单节点配置x-pack
查看>>
Elasticsearch 之(16)_filter执行原理深度剖析(bitset机制与caching机制)
查看>>
Elasticsearch 时区问题
查看>>