zoukankan      html  css  js  c++  java
  • LeetCode 211. Add and Search Word

    原题

    设计一个包含下面两个操作的数据结构:addWord(word), search(word)
    addWord(word)会在数据结构中添加一个单词。而search(word)则支持普通的单词查询或是只包含. 和a-z的简易正则表达式的查询。一个 . 可以代表一个任何的字母。

    样例

    addWord("bad")
    addWord("dad")
    addWord("mad")
    search("pad")  // return false
    search("bad")  // return true
    search(".ad")  // return true
    search("b..")  // return true
    

    解题思路

    • 本题跟Implement Trie十分相似,同样需要使用字典树
    • 由于本题里中'.'可以代替任意字符,所以当某一个字符是'.',就需要查找所有的子树,只要有一个最终能够存在,就返回True
    • 一个字母一个字母的递归

    完整代码

    class TrieNode(object):
        
        def __init__(self):
            
            self.child = {}
            self.isword = False
    
    class WordDictionary(object):
    
        def __init__(self):
            """
            Initialize your data structure here.
            """
            self.root = TrieNode()
            
    
        def addWord(self, word):
            """
            Adds a word into the data structure.
            :type word: str
            :rtype: void
            """
            node = self.root
            for i in word:
                if not node.child.get(i):
                    node.child[i] = TrieNode()
                node = node.child[i]
            node.isword = True
            
    
        def search(self, word):
            """
            Returns if the word is in the data structure. A word could contain the dot character '.' to represent any one letter.
            :type word: str
            :rtype: bool
            """
            return self.find(self.root, word)
            
        def find(self, node, word):
            if word == "":
                return node.isword
            if word[0] == '.':
                for key in node.child:
                    if self.find(node.child.get(key), word[1:]):
                        return True
            else:
                if not node.child.get(word[0]):
                    return False
                return self.find(node.child.get(word[0]),word[1:])
            return False    #防止44行里面的节点后面没有key值或是返回false
    
    # Your WordDictionary object will be instantiated and called as such:
    # obj = WordDictionary()
    # obj.addWord(word)
    # param_2 = obj.search(word)
    

      

  • 相关阅读:
    基于Spring MVC的前后端分离开发
    vue 3.0 初体验 (项目搭建)及新特性
    ECharts介绍及使用方法
    jQuery获取Radio选择的Value值||两个select之间option的互相添加操作(jquery实现)
    如何在在网页上显示pdf文档
    Js获取当前日期时间及其它操作
    ASP.NET页面生命周期和asp.net应用程序生命周期
    ASP.NET请求处理过程
    IQueryable与IQEnumberable的区别
    leetcode 705 设计哈希映射
  • 原文地址:https://www.cnblogs.com/LiCheng-/p/6594080.html
Copyright © 2011-2022 走看看