File tree Expand file tree Collapse file tree 1 file changed +58
-0
lines changed
design-add-and-search-words-data-structure Expand file tree Collapse file tree 1 file changed +58
-0
lines changed Original file line number Diff line number Diff line change 1+ class WordDictionary {
2+
3+ class TrieNode {
4+ var children : [ Character : TrieNode ] = [ : ]
5+ var isEndOfWord : Bool = false
6+ }
7+
8+ var root : TrieNode ?
9+
10+ init ( ) {
11+ root = TrieNode ( )
12+ }
13+
14+ func addWord( _ word: String ) {
15+ var currentNode = root
16+ for (index, char) in word. enumerated ( ) {
17+ if currentNode? . children [ char] == nil {
18+ currentNode? . children [ char] = TrieNode ( )
19+ }
20+ currentNode = currentNode? . children [ char]
21+ if index == word. count - 1 {
22+ currentNode? . isEndOfWord = true
23+ }
24+ }
25+ }
26+
27+ func search( _ word: String ) -> Bool {
28+ return dfs ( root, word: word, index: 0 )
29+ }
30+
31+ func dfs( _ node: TrieNode ? , word: String , index: Int ) -> Bool {
32+ guard let currentNode = node else {
33+ return false
34+ }
35+ if index == word. count {
36+ return currentNode. isEndOfWord
37+ }
38+
39+ let char = Array ( word) [ index]
40+ if char == " . " {
41+ for child in currentNode. children. values {
42+ let result = dfs ( child, word: word, index: index + 1 )
43+ if result {
44+ return true
45+ }
46+ }
47+ } else {
48+ if let child = currentNode. children [ char] {
49+ return dfs ( child, word: word, index: index + 1 )
50+ } else {
51+ return false
52+ }
53+ }
54+
55+ return false
56+ }
57+ }
58+
You can’t perform that action at this time.
0 commit comments