题目描述:
LeetCode 439. Ternary Expression Parser
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
orF
. That is, the condition will never be a digit. - The result of the expression will always evaluate to either a digit
0-9
,T
orF
.
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"
题目大意:
给定一个字符串表示一个任意嵌套的三目表达式,计算表达式的结果。你可以假设表达式一定有效,并且只包含数字0-9,?, :, T 和 F (T 和 F 分别表示 True 和 False)
注意:
- 字符串长度 ≤ 10000
- 每个数字只有一位
- 条件表达式从右向左分组 (与大多数编程语言保持一致)
- 条件永远是 T 或者 F。 也就是说,条件永远不会是数字
- 表达式的结果可以是 0-9, T 或者 F
解题思路:
栈(Stack)数据结构
循环直到栈中元素为1并且表达式为空:
取栈顶的5个元素,判断是否为一个可以解析的表达式。若是,则解析后压栈
否则从右向左将expression中的字符压入栈stack
Python代码:
class Solution(object):
def parseTernary(self, expression):
"""
:type expression: str
:rtype: str
"""
stack = []
expr = list(expression)
while len(stack) > 1 or expr:
tail = stack[-5:]
if len(tail) == 5 and tail[3] == '?' and tail[1] == ':':
tail = tail[2] if tail[4] == 'T' else tail[0]
stack = stack[:-5] + [tail]
else:
stack.append(expr.pop())
return stack[0] if stack else None
本文链接:http://bookshadow.com/weblog/2016/10/23/leetcode-ternary-expression-parser/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。