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 阅读详情

相关推荐

如何用SoulChat2.0快速克隆你的心理咨询师?手把手教你搭建AI数字孪生体

本文详细介绍了如何利用SoulChat2.0框架快速构建心理咨询师的AI数字孪生体。通过其核心PsyDT技术,仅需少量真实案例即可合成风格数据并微调大模型,从而低成本地创建能高度模仿特定咨询师语言风格和专业技术的AI分身,适用于预约访谈、心理教育等辅助场景,实现高效的人机协作。

julia4scientist的博客 978

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

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

qq_43437044的博客 387

二阶系统的带宽(频域分析)

下面以典型I型系统为例,计算系统的开环截止频率和闭环截止频率。设I型系统为: 1:系统的开环截止频率为 2:系统的闭环截止频率 其实我们在工程整定时,把ζ = 0.707,也把系统的带宽近视看成自然震荡角频率即 (wb≈wc≈wnw_{b}\approx w_{c}\approx w_{n}wb​≈wc​≈wn​)对于二阶系统。 ...

wanrenqi的博客 2万+

golang 组成树形格式

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

qq_18451629的博客 552

将机器人urdf模型转换为Mujoco环境下的mjcf模型

在使用gym环境进行人形模型站立训练的过程中,我想要将之前ros环境下的机器人urdf模型导入到mujoco环境下,这时候就需要将urdf模型转换为mujoco专用的mjcf模型。-AzureLoong.urdf是机器人模型(我这里使用青龙的模型);--custom_robot.xml是转换完成之后的机器人模型的名字和格式;包要求 Python 版本必须是 3.11 或更高),保证自己的其他训练环境和依赖不被干扰。首先将meshes文件迁移到需要输出的目录下,然后再运行转换命令。最后就可以成功输出了。

weixin_44334573的博客 3756

从Mule ESB到Apache Camel:手把手教你设计一个轻量级企业集成框架的‘心脏’

本文深入探讨了从Mule ESB到Apache Camel的轻量级企业集成框架设计实践,对比了两者在协议支持、消息处理能力和部署灵活性等方面的差异。通过实际代码示例和性能优化技巧,帮助开发者构建高效的核心模块,适用于现代微服务架构下的系统集成需求。

weixin_28738165的博客 375

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

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

weixin_32019361的博客 446

深入解析uncompyle6反编译pyc文件及常见错误修复指南

本文深入解析了使用uncompyle6工具反编译Python字节码文件(.pyc)的完整流程。针对实践中最高频的KeyError和Python版本范围限制两大错误,提供了详细的修复方案与步骤指南,并分享了处理复杂反编译结果的高级技巧与安全实践,是进行代码恢复、调试与分析的重要参考。

uber9的博客 535

golang-- 字典树

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

hello_bravo_的博客 704

玩转ubuntu18 --机器视觉方面(yolo算法识别及摄像头和cmake问题解决)

玩转ubuntu18 --机器视觉方面(yolo v3算法识别) 1.YOLO的简介 工作原理 先前的检测系统重新调整分类器或本地化器以执行检测。他们将模型应用于多个位置和比例尺的图像。图像的高分区域被视为检测。 我们使用完全不同的方法。我们将单个神经网络应用于整个图像。该网络将图像划分为区域,并预测每个区域的边界框和概率。这些边界框按预测概率加权。 我们的模型比基于分类器的系统具有几个优势。它在测试时间查看整个图像,因此其预测由图像中的全球上下文提供信息。它还通过单一网络评估进行预测,这与R-CNN等系统

qq_53951823的博客 1556

桑基图实战指南:Excel/Python/R三工具高效绘制方法

桑基图是一种以线条宽度编码流量大小、以节点位置表达流程阶段、以连接关系呈现数据流向的专项可视化技术,其核心原理在于‘宽即量、位即序、连即逻辑’。它并非装饰性图表,而是面向业务诊断的分析前置工具,尤其适用于预算分配、能源损耗、用户转化等存在明确单向流动与显著数值差异的场景。相比传统柱状图或漏斗图,桑基图能天然暴露系统瓶颈与隐性损耗,大幅提升决策效率。本文聚焦工程落地,覆盖Excel插件快速交付、Python Plotly交互开发、R networkD3生态集成三大主流路径,兼顾数据准备铁律、索引映射规范与中文

cuml0912的博客 488

golang常见数据结构之树

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

SMILY12138的博客 774

学Simulink——控制执行场景实例:基于Simulink的智能车辆电子稳定控制(ESC)仿真

本文完成了基于 Simulink 的智能车辆电子稳定控制(ESC),实现了:✅ 构建含轮胎非线性的车辆动力学模型✅ 设计滑模横摆稳定性控制器✅ 实现四轮制动力分配逻辑✅ 验证在双移线低附着场景下的卓越稳定性✅ 为主动安全控制系统开发提供完整范式。

xiaoheshang_123的博客 528

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

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

努力!奋斗! 757

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

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

mrbm_lj的博客 295

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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、付费专栏及课程。

余额充值