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

相关推荐

期货缠论实战:文华财经笔中枢指标公式解析与博易大师应用指南

本文深入解析期货缠论实战中的文华财经笔中枢指标公式及其在博易大师平台的应用技巧。详细介绍了笔中枢指标的核心逻辑、公式拆解、参数设置及多周期联合作战策略,帮助交易者提升市场分析能力与交易胜率。特别适合期货交易者学习缠论指标的实际应用。

weixin_42522552的博客 357

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

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

qq_43437044的博客 387

Win11下USB-Blaster驱动安装全攻略:Quartus用户必看(附常见问题解决)

本文详细介绍了在Windows 11系统下为Intel FPGA开发工具Quartus安装USB-Blaster驱动的完整流程与常见问题解决方案。针对Win11更严格的驱动签名验证机制,提供了从标准安装步骤到高级故障排查(如禁用驱动强制签名、使用测试模式)的实用指南,帮助用户快速解决驱动安装失败问题,确保FPGA编程调试顺利进行。

weixin_29256771的博客 663

golang 组成树形格式

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

qq_18451629的博客 552

LLM之RAG实战(五十四)| 复杂文档处理RAG框架:Ragflow

RAGFlow 是一种结合了检索增强(Retrieval-Augmented Generation,RAG)与流程控制(Flow)的人工智能技术架构。它通过检索外部知识库中的信息,结合自然语言生成技术,为用户提供更准确、更丰富的回答。同时,它还引入了流程控制机制,能够根据任务需求动态调整信息检索和生成的流程,从而更好地完成复杂的任务。RAGFlow 的核心优势在于将检索和生成相结合,打破了传统生成模型仅依赖内部参数进行文本生成的局限。

wshzd的博客 1067

从安装Eclipse 开始 开发第一个 CDS View

一篇超级简单快速的 创建CDS VIEW 入门步骤介绍文章。

IT小职员 4249

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

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

weixin_32019361的博客 446

034、特定场景优化(一):小目标检测的改进策略合集

本文针对工业场景中的小目标检测难题,提出了一套实战优化方案。首先从数据层面建议保持高分辨率输入(1024-1280像素)或采用切块训练策略,并适当放大标注区域。在网络结构上,提出减少下采样次数、增加高分辨率检测头、引入空间注意力机制等改进。损失函数方面推荐使用NWD匹配和QFL损失提升小目标敏感度。部署环节强调NMS优化、分辨率对齐和量化处理技巧。最后总结核心经验:优先优化数据质量而非模型结构,标注一致性比算法更重要,同时需为实际部署预留性能余量。硬件升级有时比算法调优更经济有效。

xiaoyaohou11的博客 652

golang-- 字典树

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

hello_bravo_的博客 704

ADC INL&DNL测试方法和实例

本文介绍了一种可操作的ADC INL和DNL的测试方法--直方图法(也称码密度法)。并实际使用该方法测试了两款芯片的ADC INL和DNL

APTCHIP的博客 1万+

[密码学实战]商密TLCP协议抓包解析与深度分析(二十九)

[密码学实战]商密TLCP协议抓包解析与深度分析(二十九)

曼岛_的博客 633

golang常见数据结构之树

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

SMILY12138的博客 774

基于STM32设计自动输液监测系统(241)

该系统集成了液位传感模块、光电传感器、电机模块、按键模块和OLED显示屏等多个功能模块,以实现全面的输液过程监控和控制。液位传感模块能够实时监测输液瓶中的液位,当液位到达限定值时,系统会自动控制步进电机夹紧输液管,并发出报警提醒,确保输液过程不会因液位过低而中断。

1343

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

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

努力!奋斗! 757

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

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

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

mrbm_lj的博客 295

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

余额充值