Ternary Expression Parser
此种类型的题一般绝对有很简短的写法,但是基本不可能找到,因为随着输入变长考虑的情况会越来越多..
具体到这道题,思路是因为计算顺序从右到左,我们可以先记录所有问号的位置,然后从尾部开始往起点靠,而且这样改变字符串并不会影响一开始记录的下标,因为我们是从末尾开始修改的
class Solution(object):
def parseTernary(self, expression):
"""
:type expression: str
:rtype: str
"""
n = len(expression)
stack = [i for i in xrange(n) if expression[i] == "?"]
result = expression
while stack:
index = stack.pop()
result = result[:index - 1] + self.eval(result[index - 1], result[index : index + 4]) + result[index + 4:]
return result
def eval(self, det, string):
if det == 'T':
return string[1]
return string[3]