-
-
Notifications
You must be signed in to change notification settings - Fork 299
/
1106.java
102 lines (92 loc) · 2.39 KB
/
1106.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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
__________________________________________________________________________________________________
sample 0 ms submission
class Solution {
int len;
int pos;
char[] carr = null;
public boolean parseBoolExpr(String expression) {
carr = expression.toCharArray();
len = carr.length;
pos = 0;
boolean res = exp();
if (pos != len)
return false;
return res;
}
boolean exp() {
if (carr[pos] == 'f') {pos++;
return false;
}
if (carr[pos] == 't'){pos++;
return true;
}
if (carr[pos] == '!') {
pos++;
if (carr[pos] != '(')
return false;
pos++;
boolean res = exp();
if (carr[pos] != ')')
return false;
pos++;
return !res;
}
if (carr[pos] == '&') {
pos++;
if (carr[pos] != '(')
return false;
pos++;
boolean temp = true;
while (true) {
boolean t = exp();
temp &= t;
if (carr[pos] == ')') break;
pos++;
}
if (carr[pos] == ',') return false;
pos++;
return temp;
}
if (carr[pos] == '|') {
pos++;
if (carr[pos] != '(')
return false;
pos++;
boolean temp = false;
while (true) {
boolean t = exp();
temp |= t;
if (carr[pos] == ')') break;
pos++;
}
if (carr[pos] == ',') return false;
pos++;
return temp;
}
return false;
}
}
__________________________________________________________________________________________________
sample 1 ms submission
class Solution {
public boolean parseBoolExpr(String expression) {
if (expression.length()==1)return expression.equals("t");
else if (expression.charAt(0)=='!')return !parseBoolExpr(expression.substring(2,expression.length()-1));
else{
char c=expression.charAt(0);
int cnt=0,start=2;
for (int i=1;i<expression.length();i++){
char t=expression.charAt(i);
if (t=='(')cnt++;
if (t==')')cnt--;
if (cnt==1&&t==','){
if (c=='&'&&parseBoolExpr(expression.substring(start,i))==false)return false;
if (c=='|'&&parseBoolExpr(expression.substring(start,i))==true)return true;
start=i+1;
}
}
return parseBoolExpr(expression.substring(start,expression.length()-1));
}
}
}
__________________________________________________________________________________________________