439. Ternary Expression Parser

ref: https://leetcode.com/problems/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).

Note:

  1. The length of the given string is ≤ 10000.
  2. Each number will contain only one digit.
  3. The conditional expressions group right-to-left (as usual in most languages).
  4. The condition will always be either T or F. That is, the condition will never be a digit.
  5. The result of the expression will always evaluate to either a digit 0-9T or F.

Example 1:

Input: "T?2:3"

Output: "2"

Explanation: If true, then result is 2; otherwise result is 3.

Example 2:

Input: "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 : (T ? 4 : 5))"
          -> "(F ? 1 : 4)"                 or       -> "(T ? 4 : 5)"
          -> "4"                                    -> "4"

Example 3:

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"


要点应该就是从expression的从后往前处理,用一个stack记录每一个char,然后从后往前遇到某个字母,上一个字母是‘?‘的时候,就可以处理了,因为从后完全的第一个?应该第一个处理,然后如果是正确的表达式,走完的时候stack里面应该只剩下一个元素了,就是结果

 1     public String parseTernary(String expression) {
 2         if(expression == null || expression.length() == 0) {
 3             return "";
 4         }
 5         Deque<Character> stack = new ArrayDeque<>();
 6         for(int i = expression.length() - 1; i >= 0; i--) {
 7             char cur = expression.charAt(i);
 8             if(!stack.isEmpty() && stack.peekFirst() == ‘?‘) {
 9                 stack.pollFirst();
10                 char trueOption = stack.pollFirst();
11                 stack.pollFirst();
12                 char falseOption = stack.pollFirst();
13                 if(cur == ‘T‘) {
14                     stack.offerFirst(trueOption);
15                 } else {
16                     stack.offerFirst(falseOption);
17                 }
18             } else {
19                 stack.offerFirst(cur);
20             }
21         }
22         return stack.size() == 1? String.valueOf(stack.pollFirst()): "";
23     }

时间复杂度是O(n), expression只走一遍

时间: 2024-08-09 23:47:42

439. Ternary Expression Parser的相关文章

Ternary Expression Parser Leetcode

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 resp

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 resp

Leetcode: 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 resp

[LeetCode] 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 Frepresent True and False respe

PHP Cron Expression Parser ( LARAVEL )

   The PHP cron expression parser can parse a CRON expression, determine if it is due to run, calculate the next run date of the expression, and calculate the previous run date of the expression. You can calculate dates far into the future or past by

过中等难度题目.0310

  .   8  String to Integer (atoi)    13.9% Medium   . 151 Reverse Words in a String      15.7% Medium     . 288 Unique Word Abbreviation      15.8% Medium     . 29 Divide Two Integers      16.0% Medium     . 166 Fraction to Recurring Decimal      17.

继续过中等难度.0309

  .   8  String to Integer (atoi)    13.9% Medium   . 151 Reverse Words in a String      15.7% Medium     . 288 Unique Word Abbreviation      15.8% Medium     . 29 Divide Two Integers      16.0% Medium     . 166 Fraction to Recurring Decimal      17.

LeetCode Problems List 题目汇总

No. Title Level Rate 1 Two Sum Medium 17.70% 2 Add Two Numbers Medium 21.10% 3 Longest Substring Without Repeating Characters Medium 20.60% 4 Median of Two Sorted Arrays Hard 17.40% 5 Longest Palindromic Substring Medium 20.70% 6 ZigZag Conversion Ea

Leetcode problems classified by company 题目按公司分类(Last updated: October 2, 2017)

Sorted by frequency of problems that appear in real interviews.Last updated: October 2, 2017Google (214)534 Design TinyURL388 Longest Absolute File Path683 K Empty Slots340 Longest Substring with At Most K Distinct Characters681 Next Closest Time482