Leetcode编程C++之1106. 解析布尔表达式
给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果。
有效的表达式需遵循以下约定:
“t”,运算结果为 True
“f”,运算结果为 False
“!(expr)”,运算过程为对内部表达式 expr 进行逻辑 非的运算(NOT)
“&(expr1,expr2,…)”,运算过程为对 2 个或以上内部表达式 expr1, expr2, … 进行逻辑 与的运算(AND)
“|(expr1,expr2,…)”,运算过程为对 2 个或以上内部表达式 expr1, expr2, … 进行逻辑 或的运算(OR)
class Solution {
public:
bool parseBoolExpr(string expression) {
stack<char> s;
for(int i=0; i<expression.size(); i++){
if( expression[i] == ',')
continue;
else if(expression[i] != ')')
s.push(expression[i]);
else{
int t=0, f=0;
while(s.top() != '('){
if(s.top() == 't')
t++;
else if(s.top() == 'f')
f++;
s.pop();
}
s.pop();
char op = s.top();
s.pop();
switch(op){
case '!': s.push(f==1 ? 't' : 'f'); break;
case '&': s.push(f==0 ? 't' : 'f'); break;
case '|': s.push(t==0 ? 'f' :' t'); break;
default: break;
}
}
}
return s.top() == 't';
}
};