File tree Expand file tree Collapse file tree 1 file changed +55
-0
lines changed
design-add-and-search-words-data-structure Expand file tree Collapse file tree 1 file changed +55
-0
lines changed Original file line number Diff line number Diff line change 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+
You can’t perform that action at this time.
0 commit comments