请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。

实现词典类WordDictionary

  • WordDictionary()初始化词典对象
  • void addWord(word)word添加到数据结构中,之后可以对它进行匹配
  • bool search(word)如果数据结构中存在字符串与word匹配,则返回true;否则,返回falseword中可能包含一些'.',每个.都可以表示任何一个字母。

示例:

**输入:**
["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'.'或小写英文字母组成
  • 最多调用50000addWordsearch

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)

最后修改日期: 2021年8月28日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。