class Solution {
public:
bool parseBoolExpr(string expression) {
stack<char> cs1;//存储表达式
stack<char> cs2;//存储运算符!, |, &
for (int i = 0; i < expression.size(); i ++) {
int exp = expression[i];
if (exp == '"') continue;
if (exp == ')') {
//计算
char op = cs2.top();
cs2.pop();
string s = "";
while (cs1.size() && cs1.top() != '(') {
s += cs1.top();//由tf以及,组成的字符串
cs1.pop();
}
cs1.pop();//把(pop出去
if (op == '&') {
if (s.find('f') != s.npos) cs1.push('f');
else cs1.push('t');
}else if (op == '|'){
if (s.find('t') != s.npos) cs1.push('t');
else cs1.push('f');
}else {
if (s == "f") cs1.push('t');
else cs1.push('f');
}
}else if (exp == '!' || exp == '&' || exp == '|'){
//存储运算符
cs2.push(exp);
}else {
cs1.push(exp);
}
}
return cs1.top() == 't' ? true: false;
}
};
1106. 解析布尔表达式
最新推荐文章于 2024-06-17 15:45:07 发布
本文介绍了一种使用栈解析布尔表达式的算法实现。通过两个栈分别存储表达式和运算符,该方法能有效处理包含逻辑非(!)、或(|)及与(&)操作的复杂布尔表达式,并返回最终的布尔值。

428

被折叠的 条评论
为什么被折叠?



