【LeetCode208】实现Trie(前缀树)

简介: 这里的前缀树,即“二十六叉树”,但是对于每个结点(对象),我们可以隐性存储一个字符——每个结点(对象)含有一个size为26的指针数组。接着就从根结点开始遍历判

1.题目


image.png


2.思路

这里的前缀树,即“二十六叉树”,但是对于每个结点(对象),我们可以隐性存储一个字符——每个结点(对象)含有一个size为26的指针数组。接着就从根结点开始遍历判断。

注意:

(1)this指针是指向当前对象的指针,又本题中调用这几个函数的使用对象均是根结点,所以下面的this指针指向根结点自己。


(2)C++中考虑防止内存泄漏,需要加上析构函数。


3.代码

class Trie {
private:
    bool isEnd;//记录该结点是否是一个串的结束
    Trie* next[26];//对象指针数组
public:
    /** Initialize your data structure here. */
    Trie() {//构造函数
        isEnd=false;
        memset(next,0,sizeof(next));//给数组赋初值0
        //或者写for(int i = 0; i < 26; i++) son[i] = NULL;
    }
    ~Trie(){//析构函数
        for(int i=0;i<26;i++){
            if(next[i]!=NULL){
                delete next[i];
            }
        }
    }
    /** Inserts a word into the trie. */
    void insert(string word) {
        Trie* node=this;
        for(char c:word){
            int cur=c-'a';
            if(node->next[cur]==NULL){
                node->next[cur]=new Trie;
            }
            node=node->next[cur];
        }
        node->isEnd=true;
    }
    /** Returns if the word is in the trie. */
    bool search(string word) {
        Trie* node=this;
        for(char c:word){
            int cur=c-'a';
            node=node->next[cur];
            if(node==NULL){
                return false;
            }
        }
        return node->isEnd;
    }
    /** Returns if there is any word in the trie that starts with the given prefix. */
    bool startsWith(string prefix) {
        Trie* node=this;
        for(char c:prefix){
            int cur=c-'a';
            if(node->next[cur]==NULL){
                return false;
            }
            node=node->next[cur];
        }
        return true;
    }
};
/**
 * Your Trie object will be instantiated and called as such:
 * Trie* obj = new Trie();
 * obj->insert(word);
 * bool param_2 = obj->search(word);
 * bool param_3 = obj->startsWith(prefix);
 */


相关文章
|
7月前
|
Go
golang力扣leetcode 208.实现Trie(前缀树)
golang力扣leetcode 208.实现Trie(前缀树)
44 0
|
7月前
|
存储 C++
leetcode-208:实现 Trie (前缀树/字典树)
leetcode-208:实现 Trie (前缀树/字典树)
56 0
|
7月前
|
存储 算法 vr&ar
☆打卡算法☆LeetCode 208. 实现 Trie (前缀树) 算法解析
☆打卡算法☆LeetCode 208. 实现 Trie (前缀树) 算法解析
|
存储 Java
力扣208:实现 Trie (前缀树) (Java多种数据结构)
Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。
180 0
力扣208:实现 Trie (前缀树) (Java多种数据结构)
|
算法 Java C++
LeetCode 208 Implement Trie (Prefix Tree)(实现前缀树)(*)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/51619848 翻译 实现一个包含insert,search和startsWith方法的前缀树。
1317 0
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
63 6
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
125 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
43 1