力扣-1106. 解析布尔表达式

本文最后更新于:2022年11月6日 晚上

题目描述

第一张图

思路和实现

一眼用的计算中缀表达式的思路,直接用两个栈存运算符和布尔值了,不知道的话可以去了解一下。代码中也写出了较为详细的注释。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution:
def parseBoolExpr(self, expression: str) -> bool:
op_stack = []
num_stack = []
for i, char in enumerate(expression):
if char == ",":
continue
elif char == "|" or char == "&" or char == "!": # 运算符入栈
op_stack.append(char)
continue
elif char == ")": # 拿一个运算符和直到遇到左括号一直拿布尔值,然后计算
op = op_stack.pop()
num_list = []
while num_stack[-1] != "(":
num_list.append(num_stack.pop())
num_stack.pop()
if op == "!": # 非运算,布尔值取反再塞入运算数栈中
if num_list[0] == "f":
num_stack.append("t")
else:
num_stack.append("f")
elif op == "|": # 或运算,只要有一个真值即为真
if "t" in num_list:
num_stack.append("t")
else:
num_stack.append("f")
else: # 与运算,只要有一个值不为真,结果就不为真
if "f" in num_list:
num_stack.append("f")
else:
num_stack.append("t")
else: # 其他符号入运算符栈
num_stack.append(char)
return True if num_stack[0] == "t" else False

(这也能上困难题啊,那我希望困难都是这种难度)


这里有一只爱丽丝

希望本文章能够帮到您~


力扣-1106. 解析布尔表达式
https://map1e-g.github.io/2022/11/06/leetcode-1106/
作者
MaP1e-G
发布于
2022年11月6日
许可协议