File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed
design-add-and-search-words-data-structure Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change 1+ # Time Complexity: O(n) - where n is the length of the word(addWord)
2+ # Space Complexity: O(N) - where N is the total number of characters inserted
3+
4+ class WordDictionary :
5+ def __init__ (self ):
6+ # using a trie (prefix tree) to store all the words
7+ self .trie = dict ()
8+
9+ def addWord (self , word : str ) -> None :
10+ # start from the root of the trie
11+ trie = self .trie
12+ for letter in word :
13+ # if this letter isn't already in the current trie level, add it
14+ if letter not in trie :
15+ trie [letter ] = dict ()
16+ # move one level deeper
17+ trie = trie [letter ]
18+ # mark the end of the word with a special null character
19+ trie ['\0 ' ] = dict ()
20+
21+ def internal_search (self , trie : dict , index : int , word : str ) -> bool :
22+ if index == len (word ):
23+ # check if this path ends a valid word
24+ return '\0 ' in trie
25+
26+ letter = word [index ]
27+
28+ # if hit a '.', gotta try all possible paths from here
29+ if letter == '.' :
30+ for child in trie .values ():
31+ if self .internal_search (child , index + 1 , word ):
32+ return True
33+ return False
34+ else :
35+ # if the letter exists in the current trie level, keep going
36+ if letter in trie :
37+ return self .internal_search (trie [letter ], index + 1 , word )
38+ else :
39+ return False
40+
41+ def search (self , word : str ) -> bool :
42+ # start the recursive search from index 0 and the root
43+ return self .internal_search (self .trie , 0 , word )
You can’t perform that action at this time.
0 commit comments