Design Add and Search Words Data Structure
class TreeNode:
def __init__(self, val):
self.val = val
self.children = {}
self.end = False
def add_child(self, c):
self.children[c] = TreeNode(c)
class WordDictionary:
def __init__(self):
self.root = TreeNode('')
def addWord(self, word):
temp = self.root
for cx, c in enumerate(word):
node = temp.children.get(c)
if not node:
temp.add_child(c)
temp = temp.children[c]
temp.end = True
def search(self, word, start=None):
temp = start if start else self.root
for cx, c in enumerate(word):
if c == '.':
flag = False
for cc in temp.children:
flag = flag or self.search(word[1 + cx::], temp.children[cc])
return flag
if c not in temp.children:
return False
temp = temp.children[c]
return temp.end