-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1106. Parsing a boolean expression
53 lines (43 loc) · 1.38 KB
/
1106. Parsing a boolean expression
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
44
45
46
47
48
49
50
51
52
53
//1106. Parsing a boolean expression
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';
}
}