File tree Expand file tree Collapse file tree 1 file changed +96
-0
lines changed
implement-trie-prefix-tree Expand file tree Collapse file tree 1 file changed +96
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ [문제풀이]
3
+ - Node를 만들자
4
+ time: O(N), space: O(N)
5
+
6
+ [회고]
7
+ 노드를 만드는 접근은 맞았는데, 그 뒤로 안풀려서 해설을 보니 노드의 길이를 26으로 한다.
8
+ 이 부분에서 이해하기가 어려웠는데 아래를 보고 이해됐다.
9
+ (root)
10
+ ├── c
11
+ │ ├── a
12
+ │ │ ├── t (end)
13
+ │ │ └── r (end)
14
+ └── d
15
+ └── o
16
+ └── g (end)
17
+
18
+ 주어진 문자열을 핸들링하는 역할은 노드가 가지도록 노드 안에 솔루션을 구현했다.
19
+ */
20
+ class Trie {
21
+ Node root ;
22
+
23
+ public Trie () {
24
+ root = new Node ();
25
+ }
26
+
27
+ public void insert (String word ) {
28
+ root .insert (word );
29
+ }
30
+
31
+ public boolean search (String word ) {
32
+ return root .search (word );
33
+ }
34
+
35
+ public boolean startsWith (String prefix ) {
36
+ return root .startsWith (prefix );
37
+ }
38
+ }
39
+
40
+ class Node {
41
+ Node [] nodes ;
42
+ boolean isEnd ;
43
+
44
+ Node () {
45
+ nodes = new Node [26 ];
46
+ }
47
+
48
+ void insert (String word ) {
49
+ Node current = this ;
50
+ for (char ch : word .toCharArray ()) {
51
+ int index = ch - 'a' ;
52
+ if (current .nodes [index ] == null ) {
53
+ current .nodes [index ] = new Node ();
54
+ }
55
+ current = current .nodes [index ];
56
+ }
57
+ current .isEnd = true ;
58
+ }
59
+
60
+ boolean search (String word ) {
61
+ Node current = this ;
62
+ for (char ch : word .toCharArray ()) {
63
+ int index = ch - 'a' ;
64
+ if (current .nodes [index ] == null ) {
65
+ return false ;
66
+ }
67
+ current = current .nodes [index ];
68
+ }
69
+
70
+ if (current .isEnd ) {
71
+ return true ;
72
+ }
73
+ return false ;
74
+ }
75
+
76
+ boolean startsWith (String prefix ) {
77
+ Node current = this ;
78
+ for (char ch : prefix .toCharArray ()) {
79
+ int index = ch - 'a' ;
80
+ if (current .nodes [index ] == null ) {
81
+ return false ;
82
+ }
83
+ current = current .nodes [index ];
84
+ }
85
+ return true ;
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Your Trie object will be instantiated and called as such:
91
+ * Trie obj = new Trie();
92
+ * obj.insert(word);
93
+ * boolean param_2 = obj.search(word);
94
+ * boolean param_3 = obj.startsWith(prefix);
95
+ */
96
+
You can’t perform that action at this time.
0 commit comments