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