LC439. Ternary Expression Parser
Given a string representing arbitrarily nested ternary expressions, calculate the result of the expression. You can always assume that the given expression is valid and only consists of digits 0-9
, ?
, :
, T
and F
(T
and F
represent True and False respectively).
Example:
Input: "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 ? (T ? F : 5) : 3)"
-> "(T ? F : 3)" or -> "(T ? F : 5)"
-> "F" -> "F"
实现?:这个表达式,记录?和:的位置,利用count找到最外层的表达式,利用recursion一层一层操作。
public class Solution {
public String parseTernary(String expression) {
if(expression == null || expression.length() <= 1) return expression;
return search(expression.toCharArray(), 0, expression.length()-1) + "";
}
private char search(char[] arr, int begin, int end){
if(begin == end) return arr[begin];
int count = 0, pos = 0, i = begin;
for(i = begin; i <= end; i++){
if(arr[i] == '?') {
count++;
if(count == 1) pos = i - 1;
}else if(arr[i] == ':') {
count--;
if(count == 0){
break;
}
} // else
} // for
return arr[pos] == 'T'?search(arr, pos+2, i-1):search(arr, i+1, end);
}
}
O(n), O(1)