LeetCode 热题 HOT 100 (008/100)【宇宙最简单版】

JECloud快速入门手册_【树形字典】 按树形层次顺序存储的结构化数据,即树形结构的数据字典。 阅读详情

【图论】No. 0208 实现 Trie (前缀树)【中等】👉力扣对应题目指路

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦
欢迎关注、订阅专栏 【力扣详解】谢谢你的支持!

⭐ 题目描述:Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:

  • Trie() 初始化前缀树对象

  • void insert(String word) 向前缀树中插入字符串 word

  • boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false

  • boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false

  • 前缀树示例:

🔥 思路:字典树,每个节点包含以下字段:

  • 指向子节点的指针数组 children。对于本题而言,数组长度为 26,即小写英文字母的数量。此时 children[0] 对应小写字母 a,children[1] 对应小写字母 b,…,children[25] 对应小写字母 z
  • 布尔字段 isEnd,表示该节点是否为字符串的结尾

参考如上思路,给出详细步骤如下:(实际代码实现时,步骤三、四部分代码复用了 🍻 标注了不同)

  • 步骤一⭐Trie() 初始化前缀树对象
    • 根据思路描述,定义成员变量 children (数组,长度 26) 和 isEnd (初始默认值为 False 不为结尾)
  • 步骤二⭐void insert(String word) 向前缀树中插入字符串 word
    • 从根节点依次向下,按照 word 中目前遍历到的字母 ch 访问对应子节点 (i.e., 当前 node 指向对应子节点) : node = node.children[ch]
      • 🍎对应子节点为空:先新建 Trie() 对象作为子节点: node.children[ch] = Trie(),再访问
      • 🍏对应子节点为不为空,直接访问
    • 遍历完 word 后,置最后访问的节点的 isEnd 为 True,表示该节点是字符串结尾
  • 步骤三⭐boolean search(String word) 如果字符串 word 在前缀树中,返回 true
    • 从根节点依次向下,按照 word 中目前遍历到的字母 ch 访问对应子节点 (i.e., 当前 node 指向对应子节点) : node = node.children[ch]
      • 🍎对应子节点为空:返回字符串 word 不在前缀树中
      • 🍏对应子节点为不为空,直接访问
    • 遍历完 word 后,如果 node 还不为 None, (🍻 此处为和 startsWith 的区别)根据最后访问的节点的 isEnd判断 search 结果
      • 为 True:该节点是字符串结尾,也就是说字符串 word 在前缀树中,返回 True
      • 为 False:该节点不是字符串结尾,仅是有前缀 word 在前缀树中,返回 False
  • 步骤四⭐boolean startsWith(String prefix) 如果前缀 prefix 在前缀树中,返回 true
    • 从根节点依次向下,按照 prefix 中目前遍历到的字母 ch 访问对应子节点 (i.e., 当前 node 指向对应子节点) : node = node.children[ch]
      • 🍎对应子节点为空:返回前缀 prefix不在前缀树中
      • 🍏对应子节点为不为空,直接访问
    • 遍历完 prefix 后,如果 node 还不为 None, (🍻 此处为和 search 的区别)
      • 说明前缀 prefix 在前缀树中,返回 True
class Trie:
    def __init__(self):  # --------------------------------------- step 1
        self.children = [None] * 26
        self.isEnd = False
    
    def searchPrefix(self, prefix: str) -> "Trie":
        node = self
        for ch in prefix:
            ch = ord(ch) - ord("a")
            if not node.children[ch]:
                return None
            node = node.children[ch]
        return node

    def insert(self, word: str) -> None:  # ---------------------- step 2
        node = self
        for ch in word:
            ch = ord(ch) - ord("a")
            if not node.children[ch]:
                node.children[ch] = Trie()
            node = node.children[ch]
        node.isEnd = True  ## 插入的末尾置 isEnd 为 True

    def search(self, word: str) -> bool:  # --------------------- step 3
        node = self.searchPrefix(word)
        return node is not None and node.isEnd

    def startsWith(self, prefix: str) -> bool:  # --------------- step 4
        return self.searchPrefix(prefix) is not None

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦
欢迎关注、订阅专栏 【力扣详解】谢谢你的支持!
🔥 LeetCode 热题 HOT 100

【信息科学与工程学】【广告科学】第四十四篇 广告平台投放和广告计费类算法01 全行业的中国企业广告投放模型总表。行业分类依据《国民经济行业分类》(GB/T 4754—2017)的门类/大类 ,产品层参考"主营产品统计代码"行业—产品映射 ,平台算法以巨量引擎、腾讯广告等官方文档为硬支撑 ,合规部分严格对齐《互联网广告管理办法》以及2026年市场监管部门最新合规提示 。编号类型(门类)行业(大类)企业及产品内容列表投放模型投放平台投放人群欲望激发维度面向人群模式(地域/文化/年龄/角色)001A 农林牧渔01 农业北大荒/中粮:五常大米、面粉、食用油、杂粮品牌曝光 + 电商转化双轨(C 阅读详情

相关推荐

4090显卡实测:PointPillars在KITTI数据集上的3D目标检测复现全流程(附避坑指南)

本文详细记录了在NVIDIA RTX 4090显卡上,从环境搭建、数据处理到模型训练与评估,完整复现PointPillars算法在KITTI数据集上进行3D目标检测的全流程。重点分享了版本配置、数据预处理、性能调优及常见问题的避坑指南,帮助开发者高效利用硬件资源,成功跑通并理解这一经典3D检测项目。

purple的博客 914

leetcode字典树算法(特别记录)

实现前缀树 前缀树是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 请你实现 Trie 类: Trie() 初始化前缀树对象。 void insert(String word) 向前缀树中插入字符串 word 。 boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。 boolean startsWith(String prefi.

qq_43437044的博客 387

GAN网络(论文阅读):Generative Adversarial Nets

当判别器效果比较好时,D(G(z))值为0,则log(1-D(G(z)))值为0,当判别器效果不好,会输出一个大于0 的数,则log(1-D(G(z)))值就为一个负数,在极端情况下,会得到负无穷大,此时判别失误。在价值函数的第二项中存在问题,在早期G比较弱的时,生成的数据和真实数据相差很大,D就容易训练的比较好,很容易区分,就会导致log(1-D(G(z)))变成0 ,这样很难求梯度来优化G,所以更新G时,将优化函数改为log(D(G(z)))。最终使G赢,即G生成的数据D判别不出来。

m0_54248968的博客 2293

golang 组成树形格式

用泛型封装通用的树形函数

qq_18451629的博客 552

揭秘大型语言模型:从神经元到思维透明的奇妙旅程

这篇博客带你走进大型语言模型的内部世界,从神经元的小任务,到功能向量的团队合作,再到层间的协作和思维的透明化。掌握这些知识,能让你在开发中更高效地优化AI,在研究中更深入地探索模型的奥秘。建议多动手实践,把这些理论变成自己的能力!

数据与算法架构提升之路专栏 1520

海康工业相机BayerRG8转BGR8实战:手把手教你用OpenCV实现高效图像转换

本文详细解析了海康工业相机BayerRG8格式到BGR8格式的高效转换实战。针对工业视觉项目中高帧率、大分辨率场景下的性能瓶颈,文章对比了海康SDK原生方案与OpenCV多种转换方法的优劣,并提供了从基础实现到高级优化(如多线程流水线、内存管理、SIMD指令集应用)的完整代码示例与性能调优策略,帮助开发者构建稳定、高效的图像处理系统。

weixin_29237635的博客 524

字典树实现_数据结构与算法之字典树(Golang实现)

1. 字典树算法描述:trie树的本质,就是利用字符串之间的公共前缀,将重复的前缀合并在一起。时间复杂度:构建O(n),查询O(k)1.1.1. 算法步骤根节点/ 什么都不表示做一个字典比如a-z 字母表没一个节点包含这26个字母的字典表,每个位置保存下个节点的指针。1.1.2. 算法分析缺点:trie树比较消耗内存:因为他没一层都保存一个字典表,就算这层的节点只有一个也要有一组表使用的...

weixin_32019361的博客 446

STM32驱动GP2Y1010AU0F红外PM2.5传感器:从采样时序到浓度标定

在嵌入式环境监测项目中,模拟传感器输出信号的准确采集是系统可靠性的基石。许多工程师在接触红外散射式粉尘传感器时,常因不了解其特殊的脉冲驱动与采样保持机制,导致ADC读数异常。红外散射原理通过检测颗粒物散射光强来估算粉尘浓度,其输出信号并非稳定直流,而是与LED脉冲同步的短时窗口电压。理解这一时序特征,并掌握在STM32平台上通过定时器与ADC协同完成微秒级精准采样的方法,是获取有效数据的关键。该技术广泛应用于室内空气质量检测、空气净化器控制及DIY环境监测节点等场景。本文以GP2Y1010AU0F为例,详细

weixin_29159127的博客 283

golang-- 字典树

一.前言 看了百度团队在 infoq 上发表的一篇【如何在秒级完成词表匹配】(https://xie.infoq.cn/article/97b2df7e41456335627ce4cd4)的文章,文章业务背景介绍的很清楚,里面有提到字典树,看到结构图我能明白工作原理,但是总感觉自己处于一种懂与不懂的半懂状态,希望通过写这篇文章我能彻底将字典树闹明白。 二.介绍 概念 字典树是一个存储字符串的树,一个节点的最大子节点数等于字母表的大小。支持在 O(L)时间内的搜索,插入和删除操作,L 是键的长度。 应用场景

hello_bravo_的博客 704

数学建模学习(78):多输入多输出回归预测模型(结合XGBoost实现)

多输入多输出回归预测问题求解

全栈川川 8130

71、CAN总线双绞线绞距与抗共模干扰的定量关系

摘要:本文探讨了CAN总线双绞线绞距与抗共模干扰的定量关系。通过理论推导得出共模电压与绞距平方成正比,绞距越小抑制效果越好。工程实践表明,工业现场推荐绞距不超过30mm,高频干扰场景需优先优化绞距。实测数据验证了绞距均匀性的重要性,建议控制在15-25mm范围,安装时保持绞合结构完整。案例显示,将绞距从50mm改为15mm后,共模干扰从12V降至1.8V,有效解决了CAN通信问题。绞距选择需兼顾理论计算与现场实测,同时注意与屏蔽层的协同设计。

2401_88858637的博客 186

golang常见数据结构之树

在上面的代码中,我们首先定义了一个Node类型,它包含一个值和两个子节点。NewNode方法用于创建一个新的节点,Insert方法用于将一个元素插入到树中,Search方法用于搜索树中是否存在某个元素。总之,Golang提供了tree包来实现树的功能。在计算机科学中,树是一种非线性数据结构,它由节点和边组成。在main函数中,我们创建了一个Node对象,并分别将5、13、7、3四个元素插入到树中。tree包提供了丰富的接口和方法,可以轻松地定义和操作树。在Golang中,我们可以使用结构体和指针来实现树。

SMILY12138的博客 774

sam3.1 部署笔记 推理封装

sam3.1 部署笔记

jacke121的专栏 424

Golang实现字典树,寻找公共前缀的字符串

字典树可以用来解决搜索前缀问题 例如给若干个不同长度的字符串 找出有公共前缀的字符串有几个 面试遇到的 或者计算身份证号,同样前缀的身份证号有多少个 之前牛客模考遇到的 此算法在搜索引擎中非常使用,写了前几个字就会弹出来相关搜索。 以及在存储大量有重复前缀的数据时可以节省大量空间。 查找的时间复杂度就是O(字符串长度) 本质上是个树,因此用链表链接。以下代码用字符串来表示,假设只有26个小写字母。 package main import "fmt" //结构体根据需要自行设置 type tree str

努力!奋斗! 757

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Leetcode Trie (前缀树) 系列 (一) 前缀树的简介

之前在公众号上有刷到过前缀树的相关内容, 但是没有进一步学习, 今天 Leetcode 的每日一题涉及到了前缀树的相关知识, 那么就学习记录一下. 下面的知识点参考leetcode 官方题解 前缀树的简介 前缀树的最常见应用应该是在搜索引擎中, 我们打了几个的关键字, 搜索栏的下面就会出现相关的一系列的包含关键字的搜索条目. 比如 : 我们在搜索引擎中打入 how to , 下面就会根据...

mrbm_lj的博客 295

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

208. 实现 Trie (前缀树)

此时 children[0]\textit{children}[0]children[0] 对应小写字母 aaa,children[1]\textit{children}[1]children[1] 对应小写字母 bbb,…链接:https://leetcode.cn/problems/implement-trie-prefix-tree/solutions/717239/shi-xian-trie-qian-zhui-shu-by-leetcode-ti500/我们从字典树的根开始,插入字符串。

◝(⑅•ᴗ•⑅)◜..°♡的博客 864

leetcode刷题 | 关于前缀树的题型总结

使用前缀树构造一颗字典树,将所有的词根都放入到前缀树中,遍历句子中的每一个单词,对单词在字典中进行词根搜索,找到对应的词根,用找到的词根换当前单词。先确定高位,再确定低位,才能保证最大 ,接着一位一位去确定这个数位的大小。异或就是当位两个数的值不同才为1,所以需要尽量找到一个与当前位不同的数。我觉得遍历查找的方式就很好了,前缀树多少有点绕圈子b( ̄▽ ̄)d。这道题我也觉得HashMap最好用,直接使用哈希中封装好的函数👍。将所有的字符倒着插入到前缀树中,如果找到了。保留所有不是其他单词后缀的单词。

小七自学博客 885

实现trie(前缀树)

leetcode 208. 实现 Trie (前缀树) Trie,又称前缀树或字典树,是一棵有根树,其每个节点包含以下字段: 指向子节点的指针数组children。对于本题而言,数组长度为 26,即小写英文字母的数量。此时children[0] 对应小写字母 a,children[1] 对应小写字母 b,…,children[25] 对应小写字母 z。 布尔字段 isEnd,表示该节点是否为字符串的结尾。 需要实现: Trie() 初始化前缀树对象。 void insert(String word

qq_40916628的博客 424

前缀树/字典树

Trie 树的结点结构 Trie 树是一个有根的树,其结点具有以下字段: 最多 RR 个指向子结点的链接,其中每个链接对应字母表数据集中的一个字母。 本文中假定 RR 为 26,小写拉丁字母的数量。 布尔字段,以指定节点是对应键的结尾还是只是键前缀。 Trie树应用 Trie (发音为 "try") 或前缀树是一种树数据结构,用于检索字符串数据集中的键。这一高效的数据结构有多种应用: 1. 自动补全 2. 拼写检查 3. IP 路由 (最长前缀匹配) 4. T9 (九宫格) 打字预测 5.

qq_41984724的博客 339

( “树” 之 Trie) 208. 实现 Trie (前缀树) ——【Leetcode每日一题】

208. 实现 Trie (前缀树)

weixin_43412762的博客 878

LeetCode——208. 实现 Trie (前缀树)

208. 实现 Trie (前缀树) 定义 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 例如: Trie存储的是单词,查询的时间复杂度是O(w),w为所查询单词的长度;如果...

悦悦的狗子 318

【LeetCode题解】208. 实现 Trie (前缀树)

实现一个 Trie (前缀树),包含insert,search, 和startsWith这三个操作。 示例: Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // 返回 true trie.search("app"); // 返回 false trie.startsWith("app"...

zfeiyu的博客 317

Leetcode-前缀树-208. 实现 Trie (前缀树)

题目208. 实现 Trie (前缀树): 题解: 首先要了解前缀树的底层是什么样子 前缀树是N叉树的一种特殊形式。通常来说,一个前缀树是用来存储字符串的。前缀树的每一个节点代表一个字符串(前缀)。每一个节点会有多个子节点,通往不同子节点的路径上有着不同的字符。子节点代表的字符串是由节点本身的原始字符串,以及通往该子节点路径上所有的字符组成的。 下面是前缀树的一个例子: 在上图示例中,我们在节点中标记的值是该节点对应表示的字符串。例如,我们从根节点开始,选择第二条路径 ‘b’,然后选择它的第一

一只菜鸟夹 603
上一篇: LeetCode 热题 HOT 100 (006/100)【宇宙最简单版】
下一篇: LeetCode 热题 HOT 100 (009/100)【宇宙最简单版】
CODE_RabbitV
博客等级 码龄7年 2930粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值