• 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

  • 相关阅读:
    黑产及社会工程学-学习历程
    ACE_Get_Opt函数笔记
    PlatformIO+Jlink进行调试
    Mac下搭建基于PlatformIO的嵌入式开发环境(STM32开发)
    选择排序
    插入排序
    JPEG原理详解 (转载)
    双链表基本操作
    单链表基本操作
    顺序表基本操作
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/14004096.html
Copyright © 2020-2023  润新知