Skip to content

Commit 8a415e3

Browse files
committed
solve
1 parent 0992313 commit 8a415e3

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
class WordDictionary {
2+
class TrieNode {
3+
var children: [Character: TrieNode] = [:]
4+
var isEndOfWord = false
5+
}
6+
7+
private var root: TrieNode
8+
9+
init() {
10+
root = TrieNode()
11+
}
12+
13+
// O(n) time / O(n) space
14+
func addWord(_ word: String) {
15+
var node = root
16+
17+
for character in word {
18+
if node.children[character] == nil {
19+
node.children[character] = TrieNode()
20+
}
21+
22+
node = node.children[character]!
23+
}
24+
25+
node.isEndOfWord = true
26+
}
27+
28+
// O(m) ~ O(26^m) time / O(1) space
29+
func search(_ word: String) -> Bool {
30+
return dfs(word: Array(word), index: 0, node: root)
31+
}
32+
33+
private func dfs(word: [Character], index: Int, node: TrieNode) -> Bool {
34+
if index == word.count {
35+
return node.isEndOfWord
36+
}
37+
38+
let character = word[index]
39+
40+
if character == "." {
41+
for child in node.children.values {
42+
if dfs(word: word, index: index + 1, node: child) {
43+
return true
44+
}
45+
}
46+
return false
47+
} else {
48+
guard let child = node.children[character] else {
49+
return false
50+
}
51+
return dfs(word: word, index: index + 1, node: child)
52+
}
53+
}
54+
}
55+

0 commit comments

Comments
 (0)