-
Notifications
You must be signed in to change notification settings - Fork 0
/
1106. Parsing A Boolean Expression
35 lines (33 loc) · 1.15 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
class Solution {
public:
bool parseBoolExpr(string expression) {
stack<char> st;
for (char currChar : expression) {
if (currChar == ',' || currChar == '(')
continue;
if (currChar == 't' || currChar == 'f' || currChar == '!' ||
currChar == '&' || currChar == '|') {
st.push(currChar);
}
else if (currChar == ')') {
bool hasTrue = false, hasFalse = false;
while (st.top() != '!' && st.top() != '&' && st.top() != '|') {
char topValue = st.top();
st.pop();
if (topValue == 't') hasTrue = true;
if (topValue == 'f') hasFalse = true;
}
char op = st.top();
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.top() == 't';
}
};