描述
给定一个表示任意嵌套三元表达式的字符串expressions,计算表达式的结果。你可以假设给定的表达式是有效的,并且只由数字0-9,?,T和F组成 (T和F分别表示True和False)。
给定字符串的长度是≤10000。
每个整数都是个位数。
条件表达式组从右到左(跟大多数的语言一样)。
条件永远是T或F,条件永远不会是一个数字。
表达式的结果总是对一个数字0-9,T或F求值。
样例1
输入: "F?1:T?3:1"
输出: 3
解释:
最外层的条件表达式的结果式False,因此结果是冒号后面的项,即: T?3:1.
所以结果是3
样例2
输入: "T?2:3"
输出: 2
样例3
输入: "T?T?F:5:3"
输出: F
解释:
可以表示成如下 : T? (T?F:5) : 3
所以结果是T?F:5的结果,是F
解题思路
用栈从后往前,遇到数字放进栈里。 遇到T就保留栈顶的,删掉第二个。 遇到F就删除栈顶的,保留第二个。
源代码
public class Solution {
/**
* @param expression: a string, denote the ternary expression
* @return: a string
*/
public String parseTernary(String expression) {
// write your code here
char[] stk = new char[5000];
int top = 0;
int len = expression.length();
for(int i = len - 1; i >= 0; i--) {
if(expression.charAt(i) == '?') {
i--, top--;
if(expression.charAt(i) == 'T')
stk[top - 1] = stk[top];
}
else if(expression.charAt(i) != ':'){
stk[top++] = expression.charAt(i);
}
}
return Character.toString(stk[0]);
}
}