Skip to content

Commit 6c91428

Browse files
committed
add solution : 208. Implement Trie (Prefix Tree)
1 parent aa4894a commit 6c91428

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/**
2+
*
3+
* 접근 방법 :
4+
* - root 노드에서 시작해서 각 문자열을 children노드에 저장한다.
5+
* - 문자열의 마지막 문자일 때 끝을 나타내기 위해서 isEndOfWord값을 true로 변경해준다.
6+
* - insert : 각 문자열 순회하면서, 문자에 대한 children노드가 없으면 생성해서 문자와 다음 노드를 연결해준다.
7+
*
8+
* 시간복잡도 : O(n)
9+
* - 문자 길이 n 만큼 문자 삽입함
10+
*
11+
* 공간복잡도 : O(n)
12+
* - 최대 문자열 길이만큼 노드 추가됨
13+
*/
14+
15+
class TrieNode {
16+
children: Map<string, TrieNode>;
17+
isEndOfWord: boolean;
18+
19+
constructor() {
20+
// 키 : 문자, 값 : 다음 문자 노드
21+
this.children = new Map();
22+
this.isEndOfWord = false;
23+
}
24+
}
25+
26+
class Trie {
27+
root: TrieNode;
28+
29+
constructor() {
30+
this.root = new TrieNode();
31+
}
32+
33+
insert(word: string): void {
34+
let currentNode = this.root;
35+
36+
for (const letter of word) {
37+
// 현재 문자가 자식 노드에 있으면 이동
38+
// 없으면 새 노드 생성해서 추가하기
39+
if (!currentNode.children.has(letter)) {
40+
currentNode.children.set(letter, new TrieNode());
41+
}
42+
// 자식 노드로 이동
43+
currentNode = currentNode.children.get(letter) as TrieNode;
44+
}
45+
currentNode.isEndOfWord = true;
46+
}
47+
48+
search(word: string): boolean {
49+
let currentNode = this.root;
50+
51+
for (const letter of word) {
52+
if (!currentNode.children.has(letter)) return false;
53+
currentNode = currentNode.children.get(letter) as TrieNode;
54+
}
55+
return currentNode.isEndOfWord;
56+
}
57+
58+
startsWith(prefix: string): boolean {
59+
let currentNode = this.root;
60+
61+
for (const letter of prefix) {
62+
if (!currentNode.children.has(letter)) return false;
63+
currentNode = currentNode.children.get(letter) as TrieNode;
64+
}
65+
return true;
66+
}
67+
}
68+
69+
/**
70+
* Your Trie object will be instantiated and called as such:
71+
* var obj = new Trie()
72+
* obj.insert(word)
73+
* var param_2 = obj.search(word)
74+
* var param_3 = obj.startsWith(prefix)
75+
*/

0 commit comments

Comments
 (0)