类比四则运算表达式,用栈来解决
如果当前字符是:
遍历结束后,栈内只有一个字符,t 或者 f,根据该字符返回结果
class Solution {
public boolean parseBoolExpr(String expression) {
int n=expression.length();
Deque<Character>stack=new ArrayDeque<>();
for(int i=0;i<n;i++){
char ch=expression.charAt(i);
//跳过逗号
if(ch==',')
continue;
//遇到右括号
else if(ch==')'){
int t=0,f=0;
//计算括号内t和f数目
while(!stack.isEmpty()&&stack.peek()!='('){
char tmp=stack.poll();
if(tmp=='t') t++;
else f++;
}
stack.poll();//弹出左括号
char op=stack.poll();//弹出运算符
//根据运算符判断表达式结果,并存入栈中
if(op=='!'){
if(f>0) stack.push('t');
else stack.push('f');
}
else if(op=='&'){
if(f>0) stack.push('f');
else stack.push('t');
}
else if(op=='|'){
if(t>0) stack.push('t');
else stack.push('f');
}
}
//其他符号入栈
else
stack.push(ch);
}
return stack.poll()=='t';
}
}
这题根据思路代码还是很简单的,自己ac了~
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)
ps. 今天居然刷到了某同学的leetcode,有760+道了,太强了,士别三日当刮目相待了