微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

前缀树(字典树)及Leetcode相关题目

前缀树(字典树)及Leetcode相关题目

前缀树的实现(C++)

class Trie{
private:
    vector<Trie*> child;
    bool isEnd;
public:
    Trie(): child(26), isEnd(false) {}
    
    void insert(string &word) {
        Trie* node = this;
        for (auto ch : word) {
            if (node->child[ch-'a'] == nullptr) {
                node->child[ch-'a'] = new Trie();
            }
            node = node->child[ch-'a'];
        }
        node->isEnd = true;
    }
    // 检索单词word是否在前缀树中
    bool search(string &word) {
        Trie* node = this;
        for (auto ch : word) {
            if (node->child[ch-'a'] == nullptr) {
                return false;
            }
             node = node->child[ch-'a'];
        }
        return node->isEnd;
    }
    // 给定一个前缀prefix,查询前缀树中是否有单词以prefix为开头
    bool startsWith(string &prefix) {
		Trie* node = this;
        for (auto ch : prefix) {
            if (node->child[ch-'a'] == nullptr) {
                return false;
            }
            node = node->child[ch-'a'];
        }
        return true;
    }
}

Leetcode相关题目(待续):

208.实现前缀树

648.替换单词

676.神奇的字典

820.最短的单词编码

677.单词之和

421.最大的异或

  • 一个32位二进制数,右移i位再与1相与就能得到右数第i + 1位的数字。

    以8位二进制数为例,127的补码为0111 1111,右移6位为0000 0001,然后和1做与运算,得到0000 0001也就是1,就是127的右数第7位数字为1。即127 >> 6 & 1 结果为1

  • 此题的前缀树是一个高度为32的二叉树,孩子只有 0 和 1 两种选择。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐