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 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"

这道题是用stack来解题的,是倒着来的,有的时候正着来不行可以倒着来嘛。倒着的主要原因是遇到问号就可以pop出需要判断的两个元素然后把结果放进去,正着不行是因为遇到问号的时候后面可能是一个表达式就有点尴尬了。。。

反正做题都要正反想一下!

public class Solution {
    public String parseTernary(String expression) {
        Stack<Character> s = new Stack<>();
        char[] str = expression.toCharArray();
        for (int i = str.length - 1; i >= 0; i--) {
            if (str[i] == ‘?‘) {
                char first = s.pop();
                s.pop();
                char second = s.pop();
                if (str[i - 1] == ‘T‘) {
                    s.push(first);
                } else {
                    s.push(second);
                }
                i--;
            } else {
                s.push(str[i]);
            }
        }
        return String.valueOf(s.pop());
    }
}

到时候还是回顾下吧怕忘记了。。。= =

时间: 2024-10-11 16:28:45

Ternary Expression Parser Leetcode的相关文章

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

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 di

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

Regular Expression Matching leetcode java

题目: Implement regular expression matching with support for '.' and '*'. '.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the entire input string (not partial). The function prototype shoul

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

385. Mini Parser - LeetCode

Question 385.?Mini Parser Solution 分析:用NI(count,list)来表示NestedInteger,则解析字符串[123,[456,[789]]]过程如下: # 首先将字符串转化为字符数组,遍历每个字符 [ 压栈操作 NI(0, null) 123 给栈顶元素设置值 NI(0, NI(123)) , 不处理 [ 压栈操作 NI(0, NI(123)) | NI(0, null) 456 给栈顶元素设置值 NI(0, NI(123)) | NI(0, 456

Regular Expression Matching [leetcode]

class Solution { public: bool isMatchCore(string s, string p,int indexS,int indexP){ if (s[indexS] == '\0' && p[indexP] == '\0') return true; if (s[indexS] != '\0' && p[indexP] == '\0') return false; if (p[indexP + 1] == '*') { if (s[index

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