首页 > 其他分享 >【11月LeetCode组队打卡】Task2--TrieTree

【11月LeetCode组队打卡】Task2--TrieTree

时间:2023-11-19 17:22:49浏览次数:113  
标签:11 node Task2 Trie public TrieNode -- 打卡 children

字典树Trie

  • 音同try,又称前缀树,是一颗有根树,根节点到树节点的一个路径就代表一个单词,多用于关键词检索,自动补完和拼写检查

  • 用空间换时间:借公共前缀来降低查询时间的开销

  • 根节点无内容

(参考:
字典树TrieTree图文详解——CSDN

实现Trie题解——力扣

208.实现Trie

复习一下this指针:

  • cpp给每个非静态的成员函数都增加了一个隐藏(不能显式地写出来)的指针参数this,指向当前对象

  • 在函数体中所有成员变量的操作都是通过该指针访问

  • 是个形参,存储在栈区(寄存器register)

成员变量(Private):

  • 节点两个字段:
    • 指向子节点的指针数组children
    • 布尔字段isEnd

功能函数(public):

  • 插入insert:

    • 存在children--沿指针移动

    • 不存在--创建,记录在children数组对应位置上

  • 查询search:

    • 存在children--后移

    • 存在prefix--后移

    • 存在字符串--前缀末尾对应节点的isEnd为true

    • 不存在--prefix不匹配

  • 查找前缀prefix:

    • 存在children--后移

    • 不存在--说明字典树中不包含该前缀,返回空指针nullptr

  • 析构函数deconstruction:

    • trie对象没有析构函数,用的默认析构函数。new出来的对象不delete释放内存,多了会泄露

AC:vector数组构建Trie

#include<iostream>
#include<string>
#include<vector>
using namespace std;

//vector动态数组方法
class Trie {
private:
    //两个字段
    vector<Trie*> children;
    bool isEnd;

    Trie* searchPrefix(string prefix){
        Trie* node=this;
        //this pointer, Trie* type
        for(char ch:prefix){
            //借ASCII码求字符下标,将字母转为数字
            ch-='a';            
            //某字符不存在于前缀中
            if(node->children[ch]==nullptr)
                return nullptr;
            //存在则后移 
            node=node->children[ch];
        }
        return node;
    }

public:
    //construction
    Trie():children(26),isEnd(false) {}

    void insert(string word) {
        Trie* node=this;
        for(char ch:word){
            ch-='a';
            if(node->children[ch]==nullptr)
                node->children[ch]=new Trie();
            //存在或生成子节点后后移
            node=node->children[ch];
        }
        node->isEnd=true;//prefix前缀的末尾
    }

    bool search(string word) {
        Trie* node=this->searchPrefix(word);
        return node!=nullptr && node->isEnd;
    }

    bool startsWith(string prefix) {
        return this->searchPrefix(prefix)!=nullptr;
    }
};

int main(){
    Trie* object;
    object=new Trie();
    object->insert("hello");
    bool flag;
    flag=object->search("hello");
    if(flag)
        cout<<"word exists";
    else    cout<<"word does not exist";
    return 0;
}

vocal,真

标签:11,node,Task2,Trie,public,TrieNode,--,打卡,children
From: https://www.cnblogs.com/Weenz-y/p/17842284.html

相关文章

  • 【洛谷 P1125】[NOIP2008 提高组] 笨小猴 题解(字符串+映射+集合)
    [NOIP2008提高组]笨小猴题目描述笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设是单词中出现次数最多的字母的出现次数,是单词中出现次数最少的字母的出现次数,......
  • 【2023潇湘夜雨】WIN11_Pro_23H2.22635.2771软件选装纯净版11.18
    【系统简介】=============================================================1.本次更新母盘来自WIN11_Pro_23H2.22635.2771。2.增加部分优化方案,手工精简部分较多。3.OS版本号为22635.2771。精简系统只是为部分用户安装,个别要求高的去MSDN下。4.集成《DrvCeo-2.15.0.5》网卡版、......
  • 【231119-1】如图,在正方形ABCD中,以AB为腰向正方形内部作等腰三角线ABE,点G在CD上,且CG=3
    【题目】如图,在正方形ABCD中,以AB为腰向正方形内部作等腰三角线ABE,点G在CD上,且CG=3DG,链接BG并延长,与AE交于F,与AD延长线交于H。连接DE交BH于点K,连接CK。若AE^2=BFBH,FG=13/5根号5.求:四边形EFKC的面积?【解答】......
  • 20231119
    下午早早来到了机房,发现tx334和StarPatrick在英雄联盟。尝试去学一些东西,但是因为他们太吵了学不进去。然后Others来了,他们三个一起开始打CS。更吵了,学不进去,所以来写日记。明天开始就要自己开始学了。有点怅然,自己NOIP考的这么烂还是要一意孤行地学OI。高一这么颓其实也......
  • 香山杯决赛2023.11.19
    香山杯决赛附件如下。https://files.cnblogs.com/files/blogs/798207/xsb2023_final.tar.gz?t=1700382211&download=true2023.11.19广东中山回家了两天,见了高中同学,晚上还去中大玩一下,明天回青岛。孤胆英雄,归途远征。以一敌百,天下无双。ezgame攻击有栈溢出漏洞,直接打游......
  • 文心一言 VS 讯飞星火 VS chatgpt (138)-- 算法导论11.4 2题
    二、用go语言,试写出HASH-DELETE的伪代码;修改HASH-INSERT,使之能处理特殊值DELETED。文心一言:首先,让我们定义一个基本的哈希表数据结构。这个结构将包括一个存储键值对的哈希表和一个存储已删除键值对的队列。我们可以用空值和大括号{}来表示“DELETED”。下面是哈希表的基本定......
  • LY1467 [ 20231113 NOIP 模拟赛 T3 ] Remember11
    题意给定\(n\)个数,求将她们收尾拼接形成\(11\)的倍数的方案数。Sol数数题。众所周知,是\(11\)的倍数意味着将该数错位相减\(mod11=0\)。注意到偶数位数的数与奇数位数的数的贡献是不同的。考虑将她们分开计算,然后合并。设\(f_{ijk}\)表示前\(i\)个奇数,其中有......
  • 文心一言 VS 讯飞星火 VS chatgpt (138)-- 算法导论11.4 2题
    二、用go语言,试写出HASH-DELETE的伪代码;修改HASH-INSERT,使之能处理特殊值DELETED。文心一言:首先,让我们定义一个基本的哈希表数据结构。这个结构将包括一个存储键值对的哈希表和一个存储已删除键值对的队列。我们可以用空值和大括号{}来表示“DELETED”。下面是哈希表的基本......
  • 11.19
    几天在GitHub上查找了erp的系统,但在使用时遇到下面这个问题Causedby:java.lang.NullPointerException:Cannotinvoke"java.util.Map.get(Object)"because"this.serverVariables"isnull atcom.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:3299) a......
  • 11月读后感Ⅱ
    调试调试是软件开发过程中的一个重要环节,它涉及到识别、定位和修复程序中的错误或问题。调试的目的是确保程序按照预期的方式运行,并在出现问题时能够快速地找到并解决它们。以下是调试的概述:1.问题识别:在调试过程开始之前,你需要确定程序中存在的问题。这可能是因为程序崩溃、功......