链接 https://leetcode.cn/problems/parsing-a-boolean-expression/description/
分析题目可以知道,需要使用栈这个数据结构存储expression
这个字符串中的字符。
从左到右遍历布尔表达式,对于每种类型的字符,执行相应的操作:
如果当前字符是逗号,则跳过该字符;
如果当前字符是除了逗号和右括号以外的任意字符,则将该字符添加到栈内;
如果当前字符是右括号,则一个表达式遍历结束,需要解析该表达式的值,并将结果添加到栈内:
t
和 f
的个数;t
和f
的数量,将新的结果入栈最后栈中剩余的字符即是结构
public boolean parseBoolExpr(String expression) {
Deque<Character> stack = new LinkedList<>();
for(int i = 0; i < expression.length(); i++){
char c = expression.charAt(i);
if(c == ','){
continue;
}else if(c != ')'){
stack.push(c);
}else{
int t = 0, f = 0;
while(stack.peek() != '('){
char val = stack.pop();
if(val == 't'){
t++;
}else{
f++;
}
}
// ( 弹出
stack.pop();
// 弹出操作数,并且进行判断和就算,将新的结果添加到栈中
char op = stack.pop();
switch(op){
case '!':
stack.push(f == 1 ? 't' : 'f');
break;
case '&':
stack.push(f == 0 ? 't' : 'f');
break;
case '|':
stack.push(t > 0 ? 't' : 'f');
break;
default:
}
}
}
return stack.pop() == 't' ? true : false;
}