File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed
design-add-and-search-words-data-structure Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change 1+ """
2+ Time complexity O(26^w)
3+ Space complexity O(w)
4+
5+ Trie, DFS
6+ """
7+
8+ class Node :
9+ def __init__ (self , end = False ):
10+ self .children = {} # char : node
11+ self .end = end
12+
13+ class WordDictionary :
14+
15+ def __init__ (self ):
16+ self .root = Node (end = True )
17+
18+ def addWord (self , word : str ) -> None :
19+ node = self .root
20+ for ch in word :
21+ if ch not in node .children :
22+ node .children [ch ] = Node ()
23+ node = node .children [ch ]
24+ node .end = True
25+
26+ def search (self , word : str ) -> bool :
27+ return self .dfs (self .root , word )
28+
29+ def dfs (self , start , word ):
30+ ch = word [0 ]
31+ if ch == word :
32+ if ch == '.' :
33+ return any ([node .end for c , node in start .children .items ()])
34+ elif ch in start .children :
35+ if start .children [ch ].end :
36+ return True
37+ return False
38+
39+ if ch == '.' :
40+ return any ([self .dfs (node , word [1 :]) for c , node in start .children .items ()])
41+ elif ch in start .children :
42+ return self .dfs (start .children [ch ], word [1 :])
43+ else :
44+ return False
You can’t perform that action at this time.
0 commit comments