Skip to content

Commit 5eb22d1

Browse files
committed
feat: Add solution for LeetCode problem 208
1 parent f14fefe commit 5eb22d1

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//
2+
// 208. Implement Trie (Prefix Tree)
3+
// https://leetcode.com/problems/implement-trie-prefix-tree/description/
4+
// Dale-Study
5+
//
6+
// Created by WhiteHyun on 2024/06/28.
7+
//
8+
9+
// MARK: - Node
10+
11+
private class Node {
12+
var children: [Character: Node]
13+
let value: Character
14+
var isEndOfWord: Bool
15+
16+
init(children: [Character: Node] = [:], value: Character, isEndOfWord: Bool = false) {
17+
self.children = children
18+
self.value = value
19+
self.isEndOfWord = isEndOfWord
20+
}
21+
}
22+
23+
// MARK: - Trie
24+
25+
class Trie {
26+
private var root: Node
27+
28+
init() {
29+
root = .init(value: "$")
30+
}
31+
32+
func insert(_ word: String) {
33+
var node = root
34+
for character in word {
35+
if node.children[character] == nil {
36+
node.children[character] = Node(value: character)
37+
}
38+
node = node.children[character]!
39+
}
40+
node.isEndOfWord = true
41+
}
42+
43+
func search(_ word: String) -> Bool {
44+
var node = root
45+
for character in word {
46+
if node.children[character] == nil {
47+
return false
48+
}
49+
node = node.children[character]!
50+
}
51+
return node.isEndOfWord
52+
}
53+
54+
func startsWith(_ prefix: String) -> Bool {
55+
var node = root
56+
for character in prefix {
57+
if node.children[character] == nil {
58+
return false
59+
}
60+
node = node.children[character]!
61+
}
62+
return true
63+
}
64+
}

0 commit comments

Comments
 (0)