码迷,mamicode.com
首页 > 其他好文 > 详细

【leetcode】1106. Parsing A Boolean Expression

时间:2019-07-05 17:55:16      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:class   put   nts   span   pre   ica   tin   入栈   The   

题目如下:

Return the result of evaluating a given boolean expression, represented as a string.

An expression can either be:

  • "t", evaluating to True;
  • "f", evaluating to False;
  • "!(expr)", evaluating to the logical NOT of the inner expression expr;
  • "&(expr1,expr2,...)", evaluating to the logical AND of 2 or more inner expressions expr1, expr2, ...;
  • "|(expr1,expr2,...)", evaluating to the logical OR of 2 or more inner expressions expr1, expr2, ...

 

Example 1:

Input: expression = "!(f)"
Output: true

Example 2:

Input: expression = "|(f,t)"
Output: true

Example 3:

Input: expression = "&(t,f)"
Output: false

Example 4:

Input: expression = "|(&(t,f,t),!(t))"
Output: false

 

Constraints:

  • 1 <= expression.length <= 20000
  • expression[i] consists of characters in {‘(‘, ‘)‘, ‘&‘, ‘|‘, ‘!‘, ‘t‘, ‘f‘, ‘,‘}.
  • expression is a valid expression representing a boolean, as given in the description.

解题思路:本题和表达式运算的题目相似。遍历expression并将每一个字符依次入栈,如果遇到‘)‘,则找出离栈顶最近的‘(‘,计算出括号之内的表达式的值并将该值入栈,直到expression遍历完成为止。

代码如下:

class Solution(object):
    def parseBoolExpr(self, expression):
        """
        :type expression: str
        :rtype: bool
        """
        stack = []
        expression = expression.replace(t,1)
        expression = expression.replace(f, 0)
        ex = list(expression)
        while len(ex) > 0:
            char = ex.pop(0)
            if char != ):
                stack.append(char)
                continue
            ts = ‘‘
            while len(stack) > 0:
                item = stack.pop(-1)
                if item == (:
                    break
                ts += item
            ts_list = ts.split(,)
            and_or = stack.pop(-1)
            if and_or == !:
                stack.append(1 if ts_list[0] == 0 else 0 )
            elif and_or == |:
                stack.append(1 if 1 in ts_list else 0)
            else:
                stack.append(0 if 0 in ts_list else 1)
        return stack[0] == 1

 

【leetcode】1106. Parsing A Boolean Expression

标签:class   put   nts   span   pre   ica   tin   入栈   The   

原文地址:https://www.cnblogs.com/seyjs/p/11139786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!