ID | Title | Difficulty | |
---|---|---|---|
Loading... |
439. Ternary Expression Parser
Medium
LeetCode
String, Stack, Recursion
Problem
Given a string expression representing arbitrarily nested ternary expressions, evaluate the expression, and return the result of it.
You can always assume that the given expression is valid and only contains digits, ‘?’, ‘:’, ‘T’, and ‘F’ where ‘T’ is true and ‘F’ is false. All the numbers in the expression are one-digit numbers (i.e., in the range [0, 9]).
The conditional expressions group right-to-left (as usual in most languages), and the result of the expression will always evaluate to either a digit, ‘T’ or ‘F’.
Example 1:
Input: expression = "T?2:3"
Output: "2"
Explanation: If true, then result is 2; otherwise result is 3.
Example 2:
Input: expression = "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 : 4)" --> "4"
or "(F ? 1 : (T ? 4 : 5))" --> "(T ? 4 : 5)" --> "4"
Example 3:
Input: expression = "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 ? F : 3)" --> "F"
"(T ? (T ? F : 5) : 3)" --> "(T ? F : 5)" --> "F"
Code
class Solution {
public String parseTernary(String expression) {
Stack<Character> stack = new Stack<>();
for(int i = expression.length() - 1; i >= 0; i--){
char c = expression.charAt(i);
if(!stack.isEmpty() && stack.peek() == '?'){
stack.pop(); // ?
char first = stack.pop();
stack.pop(); // :
char second = stack.pop();
if(c == 'T'){
stack.push(first);
} else {
stack.push(second);
}
} else {
stack.push(c);
}
}
return String.valueOf(stack.peek());
}
}
按 <- 键看上一题!
438. Find All Anagrams in a String
按 -> 键看下一题!
441. Arranging Coins