zoukankan      html  css  js  c++  java
  • leetcode算法题基础(二十九)trie(一)211. 添加与搜索单词

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

    实现词典类 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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/design-add-and-search-words-data-structure
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    class WordDictionary:
    
        def __init__(self):
            """
            Initialize your data structure here.
            """
            from collections import defaultdict
            self.lookup = {}
            
    
        def addWord(self, word: str) -> None:
            """
            Adds a word into the data structure.
            """
            tree = self.lookup
            for a in word:
                tree = tree.setdefault(a, {})
            tree["#"] = {}
            
    
        def search(self, word: str) -> bool:
            """
            Returns if the word is in the data structure. A word could contain the dot character '.' to represent any one letter.
            """
            
            def helper(word, tree):
                if not word:
                    if "#" in tree:
                        return True
                    return False
                if word[0] == ".":
                    for t in tree:
                        if helper(word[1:], tree[t]):
                            return True
                elif word[0] in tree:
                    if helper(word[1:], tree[word[0]]):
                        return True
                return False
            return helper(word, self.lookup)

    本文来自博客园,作者:秋华,转载请注明原文链接:https://www.cnblogs.com/qiu-hua/p/14004096.html

  • 相关阅读:
    node=day5
    封装异步API
    form表单的name作用
    关于app.use('/static', express.static(path.join(__dirname, 'public')))的理解
    node=day4
    PS切片
    WPF SDK研究 之 数据绑定
    C# WPF DataGrid控件实现三级联动
    wpf中的样式与模板
    WPF : ListBox的几种Template属性
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/14004096.html
Copyright © 2011-2022 走看看