zoukankan      html  css  js  c++  java
  • [Leetcode]676.Implement Magic Dictionary

    链接:LeetCode676

    实现一个带有buildDict, 以及 search方法的魔法字典。

    对于buildDict方法,你将被给定一串不重复的单词来构建一个字典。

    对于search方法,你将被给定一个单词,并且判定能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于你构建的字典中。

    示例 1:

    Input: buildDict(["hello", "leetcode"]), Output: Null
    Input: search("hello"), Output: False
    Input: search("hhllo"), Output: True
    Input: search("hell"), Output: False
    Input: search("leetcoded"), Output: False

    相关标签:字典树

    又是一道典型的字典树类型题。这题考察的关键点是,在给出一个word后,判定能否只将这个单词中一个字母换成另一个字母,使得新单词在字典树中。那么,我们可以通过递归判定:

    • 如果这个词还没有进行更新,我们需要判断在哪个位置的字符进行更换。
    • 如果这个词已经进行了更新,我们只需要判定更新后的词是否在字典树即可。
      注意,当出现“hello,hallo”的组合时,查找hello,应该判定为正确。也就是说,我们在循环过程中,当该字符出现在字典树中,我们既要考察不更新的情况,也要考察更新的情况。

    代码如下:

    python:

    import collections
    class Node():
        def __init__(self):
            self.children = collections.defaultdict(lambda:Node())
            self.isWord = False
    
    class Trie():
        def __init__(self):
            self.root = Node()
    
        def insert(self,word):
            cur = self.root
            for w in word:
                cur = cur.children[w]
            cur.isWord= True
    
        def isWord(self,word,node):
            for w in word:
                if w not in node.children:return False
                node = node.children[w]
            return node.isWord
    
        def search(self,word):
            cur = self.root
            return self.searchWithNode(word,cur)
    
        def searchWithNode(self,word,node):
            if not word:return False
            for child in node.children:
                if child == word[0] and self.searchWithNode(word[1:],node.children[child]):
                    return True
                if child != word[0] and self.isWord(word[1:],node.children[child]):
                    return True
            return False
    
    
    
    class MagicDictionary:
        def __init__(self):
            """
            Initialize your data structure here.
            """
            self.tree = Trie()
    
        def buildDict(self, dict: List[str]) -> None:
            """
            Build a dictionary through a list of words
            """
            for word in dict:
                self.tree.insert(word)
    
        def search(self, word: str) -> bool:
            """
            Returns if there is any word in the trie that equals to the given word after modifying exactly one character
            """
            return self.tree.search(word)
    
    
    # Your MagicDictionary object will be instantiated and called as such:
    # obj = MagicDictionary()
    # obj.buildDict(dict)
    # param_2 = obj.search(word)
    
  • 相关阅读:
    SQL查询语句大全集锦
    SQL Union和SQL Union All用法
    SQL Server中替换函数STUFF、replace的使用
    oscache的使用(例子)
    SQL CURSOR 游标 存储过程
    折腾iPhone的生活——AirDrop的使用
    折腾iPhone的生活——通过设置使iPhone更省电
    折腾iPhone的生活——iPhone 5s 开启 assistive touch 后卡顿的问题
    vimium快捷键列表
    在MacOSX下使用Github管理Xcode代码
  • 原文地址:https://www.cnblogs.com/hellojamest/p/12269054.html
Copyright © 2011-2022 走看看