Skip to content

Commit 78b0c1c

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

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

implement-trie-prefix-tree/mmyeon.ts

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

0 commit comments

Comments
 (0)