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>st;
for(auto ch:expression){
if(ch==',') continue;
else if(ch!=')') st.push(ch);
else{
int t=0,f=0;
while(st.top()!='('){
if(st.top()=='t') t++;
else f++;
st.pop();
}
//cout<<t<<" "<<f<<endl;
st.pop();
//cout<<st.top()<<endl;
char option=st.top();
st.pop();
if(option=='!') st.push(t==1?'f':'t');
else if(option=='&') st.push(f==0?'t':'f');
else if(option=='|') st.push(t>0?'t':'f');
}
}
return st.top()=='t';
}
};
标签:expr2,ch,运算,st,1106,expr1,表达式,布尔
From: https://www.cnblogs.com/SkyDusty/p/16860246.html