211. 添加与搜索单词 - 数据结构设计
Difficulty
Medium
Tags
前缀树
URL
https://leetcode.cn/problems/design-add-and-search-words-data-structure/
Star
请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。
实现词典类
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"); // 返回 False wordDictionary.search("bad"); // 返回 True wordDictionary.search(".ad"); // 返回 True wordDictionary.search("b.."); // 返回 True
提示:
1 <= word.length <= 25
addWord
中的word
由小写英文字母组成
search
中的word
由 '.' 或小写英文字母组成
- 最多调用
10
4
次addWord
和search
前缀树
思路
几乎是模板题!只是本题查询的单词有万能匹配字符
.
题解
class Node: def __init__(self): self.child = {} self.is_word = None class WordDictionary: def __init__(self): self.root = Node() def addWord(self, word: str) -> None: node = self.root for char in word: if char not in node.child: node.child[char] = Node() node = node.child[char] node.is_word = True def search(self, word: str) -> bool: return self.dfs(node=self.root, word=word, start=0) def dfs(self, node, word, start): if start >= len(word): if node.is_word: return True return False for key, child_node in node.child.items(): if word[start] == "." or key == word[start]: if self.dfs(child_node, word, start+1): return True return False # Your WordDictionary object will be instantiated and called as such: # obj = WordDictionary() # obj.addWord(word) # param_2 = obj.search(word)