-
Notifications
You must be signed in to change notification settings - Fork 368
/
Copy pathParsing A Boolean Expression.java
43 lines (42 loc) · 1.25 KB
/
Parsing A Boolean Expression.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Solution {
public boolean parseBoolExpr(String expression) {
Stack<Character> stack = new Stack<>();
for (char c : expression.toCharArray()) {
if (c == ')') {
List<Character> values = new ArrayList<>();
while (stack.peek() != '(') {
values.add(stack.pop());
}
stack.pop();
char operation = stack.pop();
char result = evaluate(operation, values);
stack.push(result);
} else if (c != ',') {
stack.push(c);
}
}
return stack.peek() == 't';
}
private static char evaluate(char operation, List<Character> values) {
if (operation == '!') {
return values.get(0) == 't' ? 'f' : 't';
}
if (operation == '&') {
for (char value : values) {
if (value == 'f') {
return 'f';
}
}
return 't';
}
if (operation == '|') {
for (char value : values) {
if (value == 't') {
return 't';
}
}
return 'f';
}
return 'f';
}
}