首页 > 其他分享 >208. 实现 Trie (前缀树)

208. 实现 Trie (前缀树)

时间:2025-01-10 09:43:30浏览次数:1  
标签:ch end 前缀 Trie 208 self nexts 节点 cur

  1. [题目链接](208. 实现 Trie (前缀树) - 力扣(LeetCode))

  2. 解题思路:前缀树,每个节点的内容:pre:经过该节点的数目;end:以该节点结尾的数目;nexts:下一条路径。前缀树有一个根节点,每次查找、插入、删除都要从这个节点开始。

    • 插入时,遍历该字符串,先从根节点开始,查看nexts是否有该字符,有就复用,没有就新建,经过该节点pre就加1,结尾了end就加1。然后接着弄下一个字符,同时节点也要跟着动。
    • 查找:是否有某个字符串,那么就要遍历树过程中,要有路径,同时,最终的节点的end不为0;是否有某个前缀,只需要遍历树过程中,有路径即可
  3. 代码

    
    class Trie:
    
        class Node:
            def __init__(self):
                self.pre = 0
                self.end = 0
                self.nexts = {}
                
    
        def __init__(self):
            self.root = self.Node()
            
        def insert(self, word: str) -> None:
            cur = self.root
            for ch in word:
                if ch not in cur.nexts:
                    cur.nexts[ch] = self.Node()
                cur = cur.nexts[ch]
                cur.pre += 1
            cur.end += 1
            
        def search(self, word: str) -> bool:
            cur = self.root
            for ch in word:
                if ch not in cur.nexts:
                    return False
                cur = cur.nexts[ch]
            return cur.end != 0
    
        def startsWith(self, prefix: str) -> bool:
            cur = self.root
            for ch in prefix:
                if ch not in cur.nexts:
                    return False
                cur = cur.nexts[ch]
            return True
    

标签:ch,end,前缀,Trie,208,self,nexts,节点,cur
From: https://www.cnblogs.com/ouyangxx/p/18663347

相关文章

  • P2082 区间覆盖(加强版)
    P2082区间覆盖(加强版)题目已知有\(N\)个区间,每个区间的范围是\([s_i,t_i]\),请求出区间覆盖后的总长。输入第一行一个正整数\(N\),表示区间个数。接下来\(N\)行,每行两个正整数,表示\(s_i\)和\(t_i\)。输出共一行,一个正整数,为覆盖后的区间总长。样例输入31100000......
  • 并行前缀(Parallel Prefix)加法器
    并行前缀(ParallelPrefix)加法器并行前缀加法器的基本介绍二进制加法器是目前数字计算单元中的重要模块,基础的加法器架构包括行波进位加法器(RippleCarryAdder),超前进位加法器(CarryLook-AheadAdder),进位选择加法器(CarrySelectAdder)等。加法器的进位传播是其组合延迟的主要来源......
  • 703 二维前缀和
    //703二维前缀和.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/894给一个n×m的矩阵a11,a12,…,a1m,…,anm和q个询问。每次询问给出四个数x1,y1,x2,y2,求∑i=x1~x2∑j=y1~y2a[ij]的值。输入格式第......
  • 搜索补全(一):倒排索引与Trie的魔法
    搜索补全技术:提升用户体验的智能助手搜索系列相关文章(置顶)1.原始信息再加工:一文读懂倒排索引2.慧眼识词:解析TF-IDF工作原理3.超越TF-IDF:信息检索之BM254.深入浅出BeamSearch:自然语言处理中的高效搜索利器5.搜索补全(一):倒排索引与Trie的魔法6.搜索补全(二):Trie树经典......
  • Centos7.8安装Gitlab.211208
    公司为了合规性考虑,需要自己搭建私有化版的github。那不用想,肯定要上GitLab了。项目背景:服务器:华为云ECS,需要上公网,并在安全组打开80端口访问。用户:关闭公开注册,新建用户后,手动改密码,不用安装邮件服务。步骤:1.安装gitlab-ce仓库和安装包curlhttps://packages.gitlab.com/i......
  • Xcode 批量修改文件名称前缀
    这里只记录修改文件名称,不是修改项目名称 修改xcodeproj选择旧name.xcodeproj右键显示包内容双击打开project.pbxprojcommand+F全局搜索旧name进行替换。 批量更改前缀下载python3下载地址:https://www.python.org/downloa......
  • 【PostgreSQL数据库-Tried to send an out-of-range integer as a 2-byte value: 5356
    业务侧反馈,因为某业务积攒的单量太大,导致在数据批量入库的时候,产生如下报错,主要报错信息是:请求参数的整体大小不能超过2byte。Triedtosendanout-of-rangeintegerasa2-bytevalue:53568这个报错初步看起来,有个“out-of-rangeinteger”,可能大家第一个想到的可能......
  • 前缀和与差分专题
    领地选择(二维前缀和)作为在虚拟世界里统帅千军万马的领袖,小Z认为天时、地利、人和三者是缺一不可的,所以,谨慎地选择首都的位置对于小Z来说是非常重要的。首都被认为是一个占地 C×C 的正方形。小Z希望你寻找到一个合适的位置,使得首都所占领的位置的土地价值和最高。......
  • 【C++动态规划】2088. 统计农场中肥沃金字塔的数目|2104
    本文涉及知识点C++动态规划LeetCode2088.统计农场中肥沃金字塔的数目有一个矩形网格状的农场,划分为m行n列的单元格。每个格子要么是肥沃的(用1表示),要么是贫瘠的(用0表示)。网格图以外的所有与格子都视为贫瘠的。农场中的金字塔区域定义如下:区域内格子数......
  • 每日一题洛谷B3655 [语言月赛202208] 天天爱跑步C语言
    #include<stdio.h>intmain(){ intn; scanf("%d",&n); intv1,v3,v7,v30,v120,v365; scanf("%d%d%d%d%d%d",&v1,&v3,&v7,&v30,&v120,&v365); intt=0; intcount=0; intsum=0; for......