1
1
class StreamChecker {
2
- TrieNode root ;
2
+
3
3
Deque <Character > stream ;
4
+ TrieNode root ;
4
5
public StreamChecker (String [] words ) {
5
6
root = new TrieNode ('-' );
6
- stream = new ArrayDeque ();
7
- for (String word : words ) {
8
- TrieNode curr = root ;
9
- for (int i = word .length () - 1 ; i >= 0 ; i --) {
10
- if (!curr .map .containsKey (word .charAt (i ))) {
11
- curr .map .put (word .charAt (i ), new TrieNode (word .charAt (i )));
12
- }
13
- curr = curr .map .get (word .charAt (i ));
7
+ stream = new ArrayDeque <>();
8
+ Arrays .stream (words ).forEach (word -> addWord (word ));
9
+ }
10
+
11
+ public void addWord (String word ) {
12
+ TrieNode curr = root ;
13
+ for (int i = word .length () - 1 ; i >= 0 ; i --) {
14
+ char c = word .charAt (i );
15
+ if (curr .children [c - 'a' ] == null ) {
16
+ curr .children [c - 'a' ] = new TrieNode (c );
14
17
}
15
- curr . isWord = true ;
18
+ curr = curr . children [ c - 'a' ] ;
16
19
}
20
+ curr .isWord = true ;
17
21
}
18
22
19
23
public boolean query (char letter ) {
@@ -23,25 +27,24 @@ public boolean query(char letter) {
23
27
if (curr .isWord ) {
24
28
return true ;
25
29
}
26
- if (! curr .map . containsKey ( c ) ) {
30
+ if (curr .children [ c - 'a' ] == null ) {
27
31
return false ;
28
32
}
29
- curr = curr .map . get ( c ) ;
33
+ curr = curr .children [ c - 'a' ] ;
30
34
}
31
35
return curr .isWord ;
32
36
}
33
- }
34
-
35
-
36
- class TrieNode {
37
- char c ;
38
- Map <Character , TrieNode > map ;
39
- boolean isWord ;
40
37
41
- public TrieNode (char c ) {
42
- this .c = c ;
43
- map = new HashMap <>();
44
- isWord = false ;
38
+
39
+ class TrieNode {
40
+ char c ;
41
+ TrieNode [] children ;
42
+ boolean isWord ;
43
+
44
+ public TrieNode (char c ) {
45
+ this .c = c ;
46
+ children = new TrieNode [26 ];
47
+ }
45
48
}
46
49
}
47
50
0 commit comments