-
Notifications
You must be signed in to change notification settings - Fork 0
/
parseBoolExpr.java
40 lines (36 loc) · 1.28 KB
/
parseBoolExpr.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
public class Solution {
public boolean parseBoolExpr(String expression) {
Stack<Character> st = new Stack<>();
for (char currChar : expression.toCharArray()) {
if (currChar == ',' || currChar == '(') continue;
if (
currChar == 't' ||
currChar == 'f' ||
currChar == '!' ||
currChar == '&' ||
currChar == '|'
) {
st.push(currChar);
}
else if (currChar == ')') {
boolean hasTrue = false, hasFalse = false;
while (
st.peek() != '!' && st.peek() != '&' && st.peek() != '|'
) {
char topValue = st.pop();
if (topValue == 't') hasTrue = true;
if (topValue == 'f') hasFalse = true;
}
char op = st.pop();
if (op == '!') {
st.push(hasTrue ? 'f' : 't');
} else if (op == '&') {
st.push(hasFalse ? 'f' : 't');
} else {
st.push(hasTrue ? 't' : 'f');
}
}
}
return st.peek() == 't';
}
}