Design a data structure that supports adding new words and finding if a string matches any previously added string.
Implement the
WordDictionary class:WordDictionary() Initializes the object.
void addWord(word) Adds word to the data structure, it can be matched later.bool search(word) Returns true if there is any string in the data structure that matches word or false otherwise. word may contain dots '.' where dots can be matched with any letter.Example:
Input
[“WordDictionary”,”addWord”,”addWord”,”addWord”,”search”,”search”,”search”,”search”]
[[],[“bad”],[“dad”],[“mad”],[“pad”],[“bad”],[“.ad”],[“b..”]]
Output
[null,null,null,null,false,true,true,true]
Explanation
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
Constraints:
1 <= word.length <= 500word in addWord consists lower-case English letters.
word in search consist of '.' or lower-case English letters.* At most
50000 calls will be made to addWord and search.题目大意:
设计一个数据结构支持加单词和查找单词。查找单词支持dot查询,表示配对任意字符
解题思路:
第一时间想到Trie,但难点在如果支持dot。一般Trie实现只支持单一单词查询,但是此题需要搜索所有可能节点。所以要将search加入TrieNode参数且转成DFS
解题步骤:
N/A
注意事项:
- search加入TrieNode参数且转成DFS
- 终止条件第二个用TrieNode为空而不是用is_end
Python代码:
1 | class WordDictionary(TestCases): |
算法分析:
search中不含dot时间复杂度为O(n), 含dot时间复杂度为O(26n),空间复杂度O(1), n为搜索单词长度.


