Design a data structure that supports the following two operations:
void addWord(word) bool search(word)
search(word) can search a literal word or a regular expression string containing only letters a-z
or .
. A .
means it can represent any one letter.
For example:
addWord("bad") addWord("dad") addWord("mad") search("pad") -> false search("bad") -> true search(".ad") -> true search("b..") -> true
Note:
You may assume that all words are consist of lowercase letters a-z
.
You should be familiar with how a Trie works. If not, please work on this problem:
Implement Trie (Prefix Tree) first.
Subscribe to see which companies asked this question
本来应该用trie,不过看来散列也可以
class WordDictionary(object):
def __init__(self):
self.dic = {}
def addWord(self, word):
l = len(word)
if l in self.dic.keys():
self.dic[l].append(word)
else:
self.dic[l] = [word]
def search(self, word):
l = len(word)
#print self.dic
if '.' not in word:
return (word in self.dic.get(l,[]))
li = self.dic.get(l,[])
for v in li:
flag = True
for index,c in enumerate(word):
if c == v[index] or c == '.':
flag = True
else:
flag = False
break
if flag:
return True
return False