题目地址:
https://leetcode.com/problems/ternary-expression-parser/description/
给定一个长
n
n
n的嵌套的三元表达式
s
s
s,求其值。题目保证其只含'T', 'F', '?', ':'
和
0
∼
9
0\sim 9
0∼9这些数字,且每个内部的三元表达式的值都是一位数字。
三元表达式需要从右向左读,可以用栈存已经读到的内容,一旦栈顶是'?'
,就说明可以求值了,栈顶会是第一个元素、冒号和第二个元素,看一下当前读到的字符是'T'
还是'F'
,如果是'T'
则说明是第一个元素,否则是第二个。代码如下:
class Solution {
public:
string parseTernary(string s) {
stack<char> stk;
for (int i = s.size() - 1; i >= 0; i--) {
char c = s[i];
if (stk.size() && stk.top() == '?') {
stk.pop();
char c1 = stk.top(); stk.pop();
stk.pop();
char c2 = stk.top(); stk.pop();
if (c == 'T') stk.push(c1);
else stk.push(c2);
} else stk.push(c);
}
return string(1, stk.top());
}
};
时空复杂度 O ( n ) O(n) O(n)。