题目链接: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