• [Leetcode]648.Replace Words


    链接:LeetCode648

    在英语中,有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。

    现在,给定一个由许多词根组成的词典和一个句子。你需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。

    你需要输出替换之后的句子。

    示例 1:

    输入: dict(词典) = ["cat", "bat", "rat"]
    sentence(句子) = "the cattle was rattled by the battery"
    输出: "the cat was rat by the bat"

    相关标签:字典树

    针对在多个词的查找与匹配,字典树是常用的优化算法。这里我们只需要在字典树中实现一个getRoot()方法,用于判断当前词是否有对应的词根。如果有,则替换为对应词根,如果没有,则不变。
    代码如下:

    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):
            current = self.root
            for w in word:
                current = current.children[w]
            current.isWord = True
    
        def getRoot(self,word):
            current = self.root
            for i,w in enumerate(word):
                if current.isWord:
                    return word[:i]
                if w not in current.children:
                    return word
                current = current.children[w]
            return word
    
    class Solution:
        def replaceWords(self, dict: List[str], sentence: str) -> str:
            tree = Trie()
            for word in dict:
                tree.insert(word)
            res = []
            for word in sentence.split():
                res.append(tree.getRoot(word))
            return ' '.join(res)
    
  • 相关阅读:
    如何控制递归的深度
    判断亲密数
    还是鸡兔同笼
    幂之和
    十进制转换成八进制
    单词译码
    笔试考试系统 ____pagelist使用
    笔试考试系统 ____项目部署
    笔试考试系统 ____成绩统计
    笔试考试系统 ____错题查看
  • 原文地址:https://www.cnblogs.com/hellojamest/p/12236747.html
Copyright © 2020-2023  润新知