給你一個以字元串形式表述的 布爾表達式(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’取反,其餘兩個類似,按照布爾表達式的規則來就好了。