题意:其实本质上就是三目运算 ,只不过跟我们以往的三目运算不同的是,这一系列的运算可以把T 和 F 都参与到运算中。设x=5 表达式 x>2?T:F 最终返回T.
思路:
1.从后往前遍历字符数组
2.如果遇到的是 非?和 非: 那么就将元素(数字和T F)压入栈
3.遇到?则连续pop两次进行三目运算的判断操作,确定下一个元素是T还是F,确定后再次压入。
4.返回栈中最后一个元素
class Solution {
public String parseTernary(String expression) {
Stack<Character> stack = new Stack<>();
int i = expression.length()-1;
while(i>0){
char ch = expression.charAt(i);
if(ch != '?' && ch !=':') stack.push(ch);
if(ch == '?'){
Character p = stack.pop();
Character q = stack.pop();
i--;
if(expression.charAt(i) == 'T') stack.push(p);
else stack.push(q);
}
i--;
}
return String.valueOf(stack.pop());
}
}