5
5
// #Big_O_Time_O(word.length())_or_O(prefix.length())_Space_O(N)
6
6
// #2024_11_15_Time_30_ms_(99.78%)_Space_55.1_MB_(72.51%)
7
7
8
+ import java .util .Arrays ;
9
+
8
10
@ SuppressWarnings ("java:S1104" )
9
11
public class Trie {
10
- boolean ans =false ;
11
- TrieNode [] trees =new TrieNode [26 ];
12
- public Trie () {
13
-
14
- }
12
+ private boolean ans = false ;
13
+ private final TrieNode [] trees = new TrieNode [26 ];
14
+ public Trie () {}
15
15
16
- TrieNode mapWordToTree (TrieNode t , String word , int i ){
17
- char m =word .charAt (i );
18
- boolean found =false ;
19
- TrieNode a =t .nexts [m -'a' ];
20
- if (a !=null ){
21
- if (i !=word .length ()-1 ){
22
- mapWordToTree (a ,word ,i +1 );
23
- found =true ;
24
-
25
- }else {
26
- a .end =true ;
27
- found =true ;
16
+ TrieNode mapWordToTree (TrieNode t , String word , int i ) {
17
+ char m = word .charAt (i );
18
+ boolean found = false ;
19
+ TrieNode a = t .nexts [m - 'a' ];
20
+ if (a != null ) {
21
+ if (i != word .length () - 1 ) {
22
+ mapWordToTree (a , word , i + 1 );
23
+ } else {
24
+ a .end = true ;
28
25
}
26
+ found = true ;
29
27
}
30
- if (!found ){
31
- TrieNode prev = t ;
32
- for (int j = i ; j < word .length ();j ++){
33
- TrieNode temp = new TrieNode (word .charAt (j ));
34
- prev .nexts [word .charAt (j )- 'a' ]= temp ;
35
- prev = temp ;
28
+ if (!found ) {
29
+ TrieNode prev = t ;
30
+ for (int j = i ; j < word .length (); j ++) {
31
+ TrieNode temp = new TrieNode (word .charAt (j ));
32
+ prev .nexts [word .charAt (j ) - 'a' ] = temp ;
33
+ prev = temp ;
36
34
}
37
- prev .end = true ;
35
+ prev .end = true ;
38
36
}
39
37
return t ;
40
38
}
41
39
42
40
public void insert (String word ) {
43
- char a =word .charAt (0 );
44
- if (trees [a -'a' ]==null ){
45
- TrieNode t =new TrieNode (a );
46
- trees [a -'a' ]=t ;
47
- if (1 ==word .length ()){
48
- trees [a -'a' ].end =true ;
49
- return ;
50
- }
51
- trees [a -'a' ]=mapWordToTree (trees [a -'a' ],word ,1 );
52
- }else {
53
- if (1 ==word .length ()){
54
- trees [a -'a' ].end =true ;
55
- return ;
56
- }
57
- trees [a -'a' ]=mapWordToTree (trees [a -'a' ],word ,1 );
41
+ char a = word .charAt (0 );
42
+ if (trees [a - 'a' ] == null ) {
43
+ TrieNode t = new TrieNode (a );
44
+ trees [a - 'a' ] = t ;
45
+ }
46
+ if (1 == word .length ()) {
47
+ trees [a - 'a' ].end = true ;
48
+ return ;
58
49
}
59
- //System.out.println (trees[a- 'a']);
50
+ trees [ a - 'a' ] = mapWordToTree (trees [a - 'a' ], word , 1 );
60
51
}
61
- public boolean searchWordInTree (TrieNode t , String word , int i ){
62
- char a =word .charAt (i );
63
- TrieNode m =t .nexts [a -'a' ];
64
- if (m !=null ){
65
52
66
- if ( i == word . length ()- 1 ) {
67
- ans = true ;
68
- if ( m . end ){
69
- return true ;
70
- } else {
71
- return false ;
72
- }
53
+ public boolean searchWordInTree ( TrieNode t , String word , int i ) {
54
+ char a = word . charAt ( i ) ;
55
+ TrieNode m = t . nexts [ a - 'a' ];
56
+ if ( m != null ) {
57
+ if ( i == word . length () - 1 ) {
58
+ ans = true ;
59
+ return m . end ;
73
60
}
74
- return searchWordInTree (m ,word , i +1 );
75
-
61
+ return searchWordInTree (m , word , i + 1 );
76
62
}
77
63
return false ;
78
64
}
65
+
79
66
public boolean search (String word ) {
80
- char a = word .charAt (0 );
81
- if (trees [a - 'a' ]== null ){
67
+ char a = word .charAt (0 );
68
+ if (trees [a - 'a' ] == null ) {
82
69
return false ;
83
- }else {
84
- if (1 ==word .length ()){
85
- if (trees [a -'a' ].end ){
86
- return true ;
87
- }else {
88
- return false ;
89
- }
70
+ } else {
71
+ if (1 == word .length ()) {
72
+ return trees [a - 'a' ].end ;
90
73
}
91
- return searchWordInTree (trees [a - 'a' ],word ,1 );
74
+ return searchWordInTree (trees [a - 'a' ], word , 1 );
92
75
}
93
76
}
94
77
95
78
public boolean startsWith (String prefix ) {
96
- char a = prefix .charAt (0 );
97
- ans = false ;
98
- if (trees [a - 'a' ]== null ){
79
+ char a = prefix .charAt (0 );
80
+ ans = false ;
81
+ if (trees [a - 'a' ] == null ) {
99
82
return false ;
100
- }else {
101
- if ( 1 == prefix .length ()){
83
+ } else {
84
+ if ( 1 == prefix .length ()) {
102
85
return true ;
103
86
}
104
- searchWordInTree (trees [a - 'a' ],prefix ,1 );
87
+ searchWordInTree (trees [a - 'a' ], prefix , 1 );
105
88
}
106
89
return ans ;
107
90
}
108
91
109
- class TrieNode {
92
+ static class TrieNode {
110
93
char val ;
111
- boolean end =false ;
112
- TrieNode [] nexts =new TrieNode [26 ];
113
- TrieNode (char val ){
114
- this .val =val ;
94
+ boolean end = false ;
95
+ TrieNode [] nexts = new TrieNode [26 ];
96
+
97
+ TrieNode (char val ) {
98
+ this .val = val ;
115
99
}
116
- @ Override public String toString (){
117
- return val +" " +nexts +" " +end ;
100
+
101
+ @ Override
102
+ public String toString () {
103
+ return val + " " + Arrays .toString (nexts ) + " " + end ;
118
104
}
119
105
}
120
106
}
@@ -126,11 +112,3 @@ class TrieNode{
126
112
* boolean param_2 = obj.search(word);
127
113
* boolean param_3 = obj.startsWith(prefix);
128
114
*/
129
-
130
- /*
131
- * Your Trie object will be instantiated and called as such:
132
- * Trie obj = new Trie();
133
- * obj.insert(word);
134
- * boolean param_2 = obj.search(word);
135
- * boolean param_3 = obj.startsWith(prefix);
136
- */
0 commit comments