《剑指 Offer》专项突破版 - 面试题 63 : 替换单词(C++ 实现)

题目链接LCR 063. 单词替换 - 力扣(LeetCode)

题目

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

现在,给定一个由许多词根组成的词典和一个句子,需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。例如,如果由词根组成的词典为 ["cat", "bat", "rat"],英语句子为 "the cattle was rattled by the battery",则替换之后的句子是 "the cat was rat by bat"。

分析

这个题目中的词根其实就是前缀,因此很容易想到用前缀树来解决。用前缀树解决问题通常分为两步:第 1 步是创建前缀树,第 2 步是在前缀树中查找

创建前缀树的过程就是将词典中的词根逐个添加到前缀树中。在实现前缀树中介绍了在前缀树中添加一个字符串的代码,这里只需要在该代码的基础上增加一个循环。

TrieNode* bulidTrie(vector<string>& dictionary) {
    TrieNode* root = new TrieNode;
    for (string& s : dictionary)
    {
        TrieNode* cur = root;
   &n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值