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

相关推荐

Unity Sprite Editor切片功能详解:如何快速将一张大图拆分成多个小图(附常见问题解决)

本文详细解析了Unity Sprite Editor的切片功能,指导开发者如何高效地将一张大图拆分为多个独立小图。文章涵盖了自动与手动切片操作步骤、轴心点设置、子精灵命名管理等核心技巧,并针对切片错位、性能优化等常见问题提供了实用解决方案,帮助提升2D游戏资源处理效率。

i0j1k2l3m的博客 647

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

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

qq_43437044的博客 387

W5500以太网模块官方驱动移植

W5500驱动移植

weixin_42621095的博客 4127

golang 组成树形格式

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

qq_18451629的博客 552

MATLAB双目相机标定:从工具箱实战到参数精解

本文详细讲解了使用MATLAB进行双目相机标定的完整实战流程与参数精解。从拍摄合格的棋盘格图像、设置关键参数(如径向畸变系数),到分析重投影误差、优化结果并正确导出和使用内外参,提供了从操作到原理的全面指导,帮助读者为立体视觉应用奠定精准基础。

weixin_29041767的博客 259

(全网最详细教程)康耐视读码器(以DM260S为例子)详细实用步骤

(全网最详细教程)康耐视读码器(以DM260S为例子)详细实用步骤

视觉人机器视觉的博客 7466

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

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

weixin_32019361的博客 446

剪映专业版关键帧完全教程:从原理到实战的动画必修课

关键帧是视频动画的核心原理。视频由连续静止画面(帧)构成,关键帧记录素材属性变化的起始与结束状态,中间过渡帧由软件自动计算生成。剪映专业版中,视频、音频、文本、贴纸等素材均支持关键帧动画,可调节位置、缩放、旋转、不透明度、音量等参数。操作为:在起始位置点击参数旁菱形按钮添加关键帧,移动播放头后调整参数,系统自动生成第二个关键帧。多属性可独立控制并叠加,实现放大同时淡出等复合效果。通过设定变化起点与终点,关键帧能让静止元素产生移动、缩放、淡入淡出等丰富动态,是视频剪辑从基础拼接进阶创意表达的核心技能。掌握关键

深耕计算机专业知识与技术。 2092

golang-- 字典树

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

hello_bravo_的博客 704

YOLOv8 Neck改进:BiFPN双向特征金字塔网络解析与实践

本文详细介绍了如何在YOLOv8中集成BiFPN双向特征金字塔网络,包括原理解析、代码实现、配置文件修改和性能分析。BiFPN通过双向特征融合和加权特征机制,显著提升了多尺度目标检测的性能。希望通过本文的讲解,大家能够深入理解BiFPN的工作原理,并成功将其应用到自己的目标检测项目中。如果你有任何问题或建议,欢迎在评论区留言讨论!在下一篇文章中,我们将探讨YOLOv8的其他改进技术,包括注意力机制、新的损失函数等,敬请期待!

QQ_778132974的博客 991

YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度

ASF-YOLO是一种基于YOLO的新颖框架,结合了空间和尺度特征以实现准确和快速的分割。其中,注意力尺度序列融合模块。

Limiiiing的博客 4391

golang常见数据结构之树

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

SMILY12138的博客 774

PyTorch深度学习实战(41)——循环神经网络与长短期记忆网络

循环神经网络 (Recurrent Neural Network, RNN) 通过将前一个时间步的隐藏状态作为当前时间步的输入,实现对序列数据的建模,由于循环连接的存在,RNN 能够捕获时间依赖关系,然而,RNN 在处理长期依赖性问题时会遇到困难。为了解决这个问题,提出了 LSTM,通过引入门控机制改进 RNN 来有效地处理长期依赖关系。在本节中,了解了 LSTM 和 RNN 的基本原理,并介绍了如何在 PyTorch 中实现 LSTM。

盼小辉丶的博客 1万+

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

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

努力!奋斗! 757

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

mrbm_lj的博客 295

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

余额充值