LeetCode 剑指 Offer II 前缀树(上) 专题总结

class Trie {

private:

// 前缀树, 相当于26叉树

vector<Trie*> next;

// 判断是否为单词终点

bool isWrod;

// 因为search,startsWith方法都需要查询,所以提取出查询方法

// 直接返回查询最后的点

Trie* searchPrefix(string prefix) {

Trie* node = this;

for(char ch : prefix) {

int index = ch - ‘a’;

if(node->next[index] != nullptr) {

node = node->next[index];

}else {

return nullptr;

}

}

return node;

}

public:

Trie():next(26),isWrod(false) {}

void insert(string word) {

int count = 0;

// 指向当前类,每个类都有26个分支

Trie* node = this;

for(char ch : word) {

int index = ch - ‘a’;

if(node->next[index] == nullptr) {

// 创建父类节点的index节点,此时index也有26个分支

node->next[index] = new Trie();

}

// 将父类指向index节点

node = node->next[index];

}

// 创建完当前node指向最后一个单词,设为单词终点

node->isWrod = true;

}

// 不为空 and 最后一个点的isWrod为true 代表word存在

bool search(string word) {

Trie* node = this->searchPrefix(word);

return node != nullptr && node->isWrod;

}

// 不为空即查到了前缀

bool startsWith(string prefix) {

Trie* node = this->searchPrefix(prefix);

return node != nullptr;

}

};

063. 替换单词

=========================================================================

题目:

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

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

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

示例:

输入:dictionary = [“cat”,“bat”,“rat”], sentence = “the cattle was rattled by the battery”

输出:“the cat was rat by the bat”

提示:

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值