title:"0211: Design Add and Search Words Data Structure"
0211: Design Add and Search Words Data Structure
classTrieNode:def__init__(self, val):
self.val = val
self.end =False
self.children ={}classWordDictionary:def__init__(self):
self.root = TrieNode('')defaddWord(self, word):
temp = self.root
for cx, c inenumerate(word):if c notin temp.children:
temp.children[c]= TrieNode(c)
temp = temp.children[c]
temp.end =Truedefsearch(self, word):defrec_search(wx, word, init_node):
wlen =len(word)
temp = init_node
for cx inrange(wx, wlen):
c = word[cx]if c =='.':
flag =Falsefor cc in temp.children:
flag = flag or rec_search(1+ cx, word, temp.children[cc])return flag
if c notin temp.children:returnFalse
temp = temp.children[c]return temp.end
return rec_search(0, word, self.root)