zoukankan      html  css  js  c++  java
  • 648. Replace Words (Medium)

    In English, we have a concept called root, which can be followed by some other words to form another longer word - let's call this word successor. For example, the root an, followed by other, which can form another word another.

    Now, given a dictionary consisting of many roots and a sentence. You need to replace all the successor in the sentence with the rootforming it. If a successor has many roots can form it, replace it with the root with the shortest length.

    You need to output the sentence after the replacement.

    Example 1:

    Input: dict = ["cat", "bat", "rat"]
    sentence = "the cattle was rattled by the battery"
    Output: "the cat was rat by the bat"

    Note:

    1. The input will only have lower-case letters.
    2. 1 <= dict words number <= 1000
    3. 1 <= sentence words number <= 1000
    4. 1 <= root length <= 100
    5. 1 <= sentence words length <= 1000

    思路:字典树(Trie)
    首先构建字典树,进行遍历,然后搜索;

    class TrieNode():
        def __init__(self):
            self.data = {}
            self.is_word = False
    
    class Trie():
        def __init__(self):
            self.root = TrieNode()
            
        def insert(self, word):
            node = self.root
            for letter in word:
                child = node.data.get(letter)
                if not child:
                    node.data[letter] = TrieNode()
                node = node.data[letter]
            node.is_word = True
            
        def search(self, word):
            string = ''
            node = self.root
            for letter in word:
                node = node.data.get(letter)
                if not node:
                    break
                string += letter
                if node.is_word:
                    return string
            return word
        
    class Solution():
        def replaceWords(self, dict, sentence):
            """
            :type dict: List[str]
            :type sentence: str
            :rtype: str
            """
            trie = Trie()
            for word in dict: 
                trie.insert(word)
            res = []
            for word in sentence.split():
                res.append(trie.search(word))
            return ' '.join(res)
  • 相关阅读:
    python下载.msg文件的附件
    python如何提取word内的图片
    python如何实现对word内段落文本及表格的读取
    python中使用to_excel时如何不覆盖原有数据来新建sheet页
    用python获取表格中的节假日起始日期
    如何利用python的xlrd模块读取日期格式的Excel
    HTML简介
    前端开发工程师
    测试工程师养成记
    电子沙盘
  • 原文地址:https://www.cnblogs.com/yancea/p/7531774.html
Copyright © 2011-2022 走看看