Skip to content

Latest commit

 

History

History
34 lines (32 loc) · 929 Bytes

1106.md

File metadata and controls

34 lines (32 loc) · 929 Bytes

1106. Parsing A Boolean Expression

Solution 1 (time O(n), space O(n))

class Solution(object):
    def parseBoolExpr(self, expression):
        """
        :type expression: str
        :rtype: bool
        """
        s = []
        for c in expression:
            if c == ",":
                continue
            if c != ")":
                s.append(c)
                continue
            cur_t, cur_f = 0, 0
            while s[-1] != "(":
                if s.pop() == "t":
                    cur_t += 1
                else:
                    cur_f += 1
            s.pop()
            op = s.pop()
            if op == "!":
                s.append("t" if cur_f == 1 else "f")
            elif op == "&":
                s.append("t" if cur_f == 0 else "f")
            elif op == "|":
                s.append("t" if cur_t else "f")
        return s[-1] == "t"