天天看點

JAVA程式設計:解析布爾表達式(LeetCode:1106)

給你一個以字元串形式表述的 布爾表達式(boolean) expression,傳回該式的運算結果。

有效的表達式需遵循以下約定:

"t",運算結果為 True

"f",運算結果為 False

"!(expr)",運算過程為對内部表達式 expr 進行邏輯 非的運算(NOT)

"&(expr1,expr2,...)",運算過程為對 2 個或以上内部表達式 expr1, expr2, ... 進行邏輯 與的運算(AND)

"|(expr1,expr2,...)",運算過程為對 2 個或以上内部表達式 expr1, expr2, ... 進行邏輯 或的運算(OR)

示例 1:

輸入:expression = "!(f)"

輸出:true

示例 2:

輸入:expression = "|(f,t)"

示例 3:

輸入:expression = "&(t,f)"

輸出:false

示例 4:

輸入:expression = "|(&(t,f,t),!(t))"

提示:

1 <= expression.length <= 20000

expression[i] 由 {'(', ')', '&', '|', '!', 't', 'f', ','} 中的字元組成。

expression 是以上述形式給出的有效表達式,表示一個布爾值。

思路:這道題和括号比對問題很像,我們采用棧模拟的方法, 當遇到右括号時考慮求出該括号内的布爾表達式并将其壓入棧中,若括号前為‘!’,則根據括号的的‘t’或者‘f’取反,其餘兩個類似,按照布爾表達式的規則來就好了。