请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。
实现词典类WordDictionary
:
WordDictionary()
初始化词典对象void addWord(word)
将word
添加到数据结构中,之后可以对它进行匹配bool search(word)
如果数据结构中存在字符串与word
匹配,则返回true
;否则,返回false
。word
中可能包含一些'.'
,每个.
都可以表示任何一个字母。
示例:
**输入:**
["WordDictionary","addWord","addWord","addWord","search","search","search","search"]
[[],["bad"],["dad"],["mad"],["pad"],["bad"],[".ad"],["b.."]]
**输出:**
[null,null,null,null,false,true,true,true]
**解释:**
WordDictionary wordDictionary = new WordDictionary();
wordDictionary.addWord("bad");
wordDictionary.addWord("dad");
wordDictionary.addWord("mad");
wordDictionary.search("pad"); // return False
wordDictionary.search("bad"); // return True
wordDictionary.search(".ad"); // return True
wordDictionary.search("b.."); // return True
提示:
1 <= word.length <= 500
addWord
中的word
由小写英文字母组成search
中的word
由'.'
或小写英文字母组成- 最多调用
50000
次addWord
和search
1.字典树
Python解答:
class WordDictionary:
def __init__(self):
"""
Initialize your data structure here.
"""
self.trie = {}
self.is_word = False
def addWord(self, word: str) -> None:
i = 0
p = self
while i < len(word):
if word[i] not in p.trie.keys():
p.trie[word[i]] = WordDictionary()
p = p.trie[word[i]]
i += 1
p.is_word = True
def search(self, word: str) -> bool:
def helper(adic, word, i):
if i == len(word):
if adic.is_word:
return True
else:
return False
else:
if word[i] != '.' and word[i] not in adic.trie.keys():
return False
elif word[i] != '.' and word[i] in adic.trie.keys():
return helper(adic.trie[word[i]], word, i+1)
else:
for c in adic.trie.keys():
if helper(adic.trie[c], word, i+1):
return True
return False
return helper(self, word, 0)
# Your WordDictionary object will be instantiated and called as such:
# obj = WordDictionary()
# obj.addWord(word)
# param_2 = obj.search(word)
构造时间复杂度:O(n*k)
查询时间复杂度:O(k)
留言