【重点】【前缀树|字典树】208.实现Trie(前缀树)

GJB设计开发各阶段的文件和记录要求 阅读详情

题目
前缀树介绍:https://blog.youkuaiyun.com/DeveloperFire/article/details/128861092
什么是前缀树
在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。
trie 中的键通常是字符串,但也可以是其它的结构。trie 的算法可以很容易地修改为处理其它结构的有序序列,比如一串数字或者形状的排列。比如,bitwise trie 中的键是一串位元,可以用于表示整数或者内存地址。trie 树常用于搜索提示。如当输入一个网址,可以自动搜索出可能的选择。当没有完全匹配的搜索结果,可以返回前缀最相似的可能。
在这里插入图片描述

法1:迭代实现

参考:灵茶山艾府,从二叉树到二十六叉树。
在这里插入图片描述

Python

class Node:
    def __init__(self):
        self.son = dict()
        self.end = False

class Trie:

    def __init__(self):
        self.root = Node()

    def insert(self, word: str) -> None:
        cur = self.root
        for c in word:
            if c not in cur.son:
                cur.son[c] = Node()
            cur = cur.son[c]
        cur.end = True

    def search(self, word: str) -> bool: # 完全匹配!!!
        return self.find(word) == 2

    def startsWith(self, prefix: str) -> bool:
        return self.find(prefix) != 0

    def find(self, word: str) -> int:
        cur = self.root
        for c in word:
            if c not in cur.son:
                return 0 # 匹配失败
            cur = cur.son[c]
        # 2: 完全匹配, 1: 前缀匹配
        return 2 if cur.end else 1
        


# Your Trie object will be instantiated and called as such:
# obj = Trie()
# obj.insert(word)
# param_2 = obj.search(word)
# param_3 = obj.startsWith(prefix)

Java

class Trie {
    
    private Trie[] children;                //记录该字母的下一位所有可能的字母坐标
    private boolean isEnd;                  //该字母是否为最后一个字母

    public Trie() {
        children = new Trie[26];            //初始化26个字母
        isEnd = false;                      //默认为不是最后一个字母
    }

    public void insert(String word) {
        Trie node = this;                       //得到字典树根节点
        for (char c : word.toCharArray()) {     //去遍历待插入单词的字符集合
            int index = c - 'a';                //得到该字符在数组中的坐标
            if (node.children[index] == null) { //如果正在遍历的该字母在上一个节点的数组坐标中没有记录,就新建一个字母节点在字典树中
                node.children[index] = new Trie();
            }
            node = node.children[index];        //每一次生成字母都移动指针到下一个字母节点
        }
        node.isEnd = true;                      //最后一个字母节点设置为最后一个字母
    }

    public boolean search(String word) {
        Trie node = searchPrefix(word);         //返回检索到的最后一个字母节点
        return node != null && node.isEnd;      //只有当该单词在字典树中存在并且最后一个字母节点为最后一个字母,才返回true
    }

    public boolean startsWith(String prefix) {
        return searchPrefix(prefix) != null;    //只要前缀匹配存在于字典树中就返回true
    }

    /**
     * 前缀搜索 还是 全文搜索都是调用此方法,区别在于前缀搜索只要前缀匹配就返回true,
     * 全文搜索则要匹配到最后一个字母才返回true,所以这里返回的是最后一个字母节点
     */
    public Trie searchPrefix(String word) {
        Trie node = this;                         //得到字典树根节点
        for (char c : word.toCharArray()) {       //开始验证字符串在字典树中是否存在
            int index = c - 'a';                  //得到该字符在数组中的坐标
            if (node.children[index] != null) {   //如果该字符在数组中存在,就移动指针到下一个字母节点,直至到达最后一个待搜索的最后一个字母节点
                node = node.children[index];
            } else {
                return null;                      //如果在此过程中没有找到待搜索的其中一个字母节点,就返回null,代表该字母不存在于字典树中
            }
        }
        return node;                              //没有问题,那就是到达了最后一个待搜索的最后一个字母节点,返回该节点(节点可能是最后一个字母节点也可能不是)
    }
}
Pixhawk2.4.8接口及引脚定义 pixhawk2.4.8接口定义图解 阅读详情

相关推荐

Python 打包与发布陷阱:如何用 setuptools 和 PyInstaller 生成跨平台可执行文件?

使用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1207

字典树 前缀树

字典树是一种数据结构,也叫前缀树、Trie树。比较常用的应用有前缀匹配和词频统计。

weixin_38384296的博客 382

STM32嵌入式开发实战:如何用miniLZO压缩算法节省70%存储空间(附完整工程)

本文详细介绍了如何在STM32嵌入式开发中使用miniLZO无损压缩算法实现高达70%的存储空间节省。通过对比分析不同轻量级算法,重点讲解miniLZO的内存优化配置、分块压缩策略和完整工程实现,帮助开发者有效解决嵌入式系统中的存储瓶颈问题。

ss78901的博客 881

Leetcode 刷题指南-树(2)字典树 C++

作为 Leetcode 刷题指南-树 专题的第二章,本文主要介绍设计字符串搜索和存储结构的结构 字典树 以及相关的Leetcode题型。 首先我们先定义作为字典树的节点的结构: //字典树节点结构 struct TreeNode { TreeNode*child[26]; bool isword; TreeNode() { ...

God_Xuebi的博客 656

Proxmox PVE 黑苹果安装全攻略:从镜像准备到系统配置

本文提供了一份在Proxmox PVE虚拟化平台上安装macOS(黑苹果)的详细指南。内容涵盖从获取OpenCore引导镜像和macOS安装镜像、宿主机环境检查与调优,到创建虚拟机、修改关键配置文件、解决引导问题以及安装后优化的全流程。重点在于通过正确的PVE配置和参数调整,成功在KVM虚拟机中运行macOS系统,为开发测试提供灵活环境。

opencv7vision的博客 1107

Vcenter安全加固-防火墙-只允许特定的IP地址访问Vcenter

3、此时除了被允许的IP地址可以访问之外,其余地址均被防火墙阻挡。2、再进行0.0.0.0/0匹配所有其他IP地址进行拒绝访问。1、只需要关注接受和拒绝即可。2、其余选择不是这个场景使用的。1.只允许特定的IP地址访问Vcenter。1、登录Vcenter管理界面。2、点击防火墙-添加。

博然的宝藏库 7280

Trie树与字典树:LeetCode前缀搜索与单词匹配实战指南

前缀搜索与单词匹配是算法面试中的高频考点,而Trie树(字典树)正是解决这类问题的利器!🎯 在LeetCode算法题库中,Trie树相关题目不仅考验数据结构理解,更考察实际应用能力。本文将带你深入理解Trie树的核心原理,并通过LeetCode实战案例掌握前缀搜索与单词匹配的解题技巧。 ## 什么是Trie树?前缀搜索的高效数据结构 Trie树,又称字典树或前缀树,是一种专门用于字符串检索的

gitblog_01084的博客 670

RK3588 MPP视频编码实战:从环境搭建到高效封装

本文详细介绍了在RK3588平台上利用MPP(Media Process Platform)进行硬件视频编码的完整实战流程。从MPP库的环境搭建、编译安装,到核心编码参数(如码率控制、GOP、图像对齐)的深入解析,并提供了一个可复用的C++编码器类封装方案,帮助开发者快速实现高效的H.264/H.265视频编码,显著降低CPU占用。

weixin_29192211的博客 347

【Hot 100 刷题计划】 LeetCode 208. 实现 Trie (前缀树) | C++ 字典树题解

本文介绍了LeetCode 208题实现Trie(前缀树)的C++解法。Trie是一种用于高效存储和检索字符串的树形数据结构,常用于自动补全和拼写检查等场景。文章详细解析了Trie的核心原理:通过空间换时间,利用字符串公共前缀减少查询时间。具体实现包含节点结构设计(son数组和ed标志位)和三个核心操作:插入(insert)、精准查找(search)和前缀查找(startsWith)。C++代码实现了Trie类的完整功能,包括初始化、字符串插入和两种查询方式,时间复杂度均为O(L)(L为字符串长度)。

qq_51233453的博客 921

MQL5教程 01 MT5有关EA的操作、MetaEditor 工具栏主要功能

MQL5教程 01 MT5有关EA的操作、MetaEditor 工具栏主要功能

weixin_42830015的博客 3983

基于IMX429-IMX430-IMX432-IMX437系列传感器的SLVS-MIPI桥接方案设计与实现

本文详细介绍了针对索尼IMX429、IMX430、IMX432及IMX437系列传感器的SLVS-MIPI桥接方案设计与实现。针对工业视觉、车载摄像头等应用中主流SoC仅支持MIPI接口的痛点,提出基于FPGA(如Lattice Crosslink-NX)的透传桥接方案,将传感器输出的SLVS信号无损转换为MIPI CSI-2信号,确保数据完整性与低延迟,并探讨了硬件选型、逻辑设计及多传感器兼容性等关键问题。

weixin_29230901的博客 461

Trie(前缀树/字典树):原理和LeetCode208.实现Trie(前缀树)

摘要:介绍了前缀树的基本知识,并举例介绍其应用场景和实现方式。

不想coding的博客 2652

2023年美高赛HiMCM:A题蒲公英 思路

蒲公英,通常称为蒲公英,是一种原产于欧亚大陆的植物,现在在世界各地都可以找到[1]。这种植物很容易通过其亮黄色的花朵(图1)和独特的“马勃”种子头(图2)来识别。该头部的每颗种子都附着在一个类似降落伞的结构上,称为“冠毛”,有利于风的传播[2]。如果处于“马勃”阶段的单个蒲公英毗邻一块开阔的一公顷土地,请创建一个数学模型来预测蒲公英在 1、2、3、6 和 12个月内的传播情况。确保您的模型考虑了各种气候条件(例如温带、干旱和热带气候)对蒲公英生长的影响。2. 蒲 公英、人类和其他植物之间的关系很复杂。

斌擎科技 7402

LeetCode 208. 实现 Trie (前缀树) - 字典树设计与实现详解

题目描述:请你设计并实现一个 Trie(前缀树),支持如下操作:insert(word):向字典中插入字符串 wordsearch(word):如果字典中存在完全匹配的 word,返回 true;否则返回 falsestartsWith(prefix):如果字典中存在以 prefix 作为前缀的任意字符串,返回 true;否则返回 false题目默认测试用例为小写英文字母 a-z,但也可扩展到更广字符集。

m0_52114506的博客 992

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【面试经典 150 | 字典树】实现 Trie (前缀树)

【面试经典 150 | 字典树】实现 Trie (前缀树) +【字典树】.

weixin_54383080的博客 944

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

208. 实现 Trie (前缀树)

共用前缀,节点存路不存值,唯有终点做标记。Trie 是一棵 26 叉树(假设只处理小写字母)。节点:通常不直接存字符,而是通过“数组索引”隐含字符(son[0]代表 'a')。路径:从 Root 往下走,经过的路径连起来就是一个字符串。标记:必须有一个,区分“这里是单词结尾”还是“只是路过”。

一同进步 699

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Leetcode 208 Implement Trie (Prefix Tree) 实现字典树 (前缀字典树)

实现一个`Trie字典树`,实现 `insert` `search` `startsWith` 方法。

(ง •̀_•́)ง 1385

Java版LeetCode热题100之实现 Trie(前缀树):从原理到实战的深度解析

定义:一种有序树,用于存储动态集合,其中键通常是字符串。别名:字典树、单词查找树核心思想空间换时间,通过共享前缀加速查询Trie 是处理字符串前缀问题的利器时间复杂度稳定 O(L),不受数据规模影响设计关键:节点结构(children + isEnd)、路径遍历逻辑权衡:空间换时间,适用于前缀密集场景。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 3047

[LeetCode]208. 实现 Trie (前缀树)(java实现)

@[TOC]([LeetCode]208. 实现 Trie (前缀树)(java实现)) 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 详细的构建思路,请看下文 class Trie { private class TrieNode { private boolean isEnd; private TrieNode[] next; public TrieNode() { isEnd = false; next = new TrieNode[26]; }

cloud的博客 514

LeetCode 208. 实现 Trie (前缀树):从原理到代码落地

本文详细解析了LeetCode 208题实现前缀树(Trie)的方法。前缀树是一种高效处理字符串匹配的数据结构,通过共享公共前缀节省空间。文章从原理入手,讲解了Trie节点设计(子节点集合和结束标记),提供了完整的TypeScript实现代码,并详细分析了插入、查询等核心方法的时间复杂度(O(n))。关键点包括哈希表存储子节点、isEnd标记区分完整单词与前缀,以及如何处理边界情况。该实现可用于自动补全、拼写检查等场景,是字符串处理的重要数据结构。

2401_86788218的博客 596

树 - 前缀树(Trie Tree)

在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。Trie 这个术语来自于 retrieval。根据词源学,trie 的发明者 Edward Fredkin 把它读作/ˈtriː/ “tree”。

Wzideng@qq.com 813

[前缀树]leetcode208:实现前缀树(medium)

题目: 题解: 字母树的插入(Insert)、删除( Delete)和查找(Find)都非常简单,用一个一重循环即可,即第i 次循环找到前i 个字母所对应的子树,然后进行相应的操作。实现这棵字母树,我们用最常见的数组保存(静态开辟内存)即可,当然也可以开动态的指针类型(动态开辟内存)。至于结点对儿子的指向,一般有三种方法: 1、对每个结点开一个字母集大小的数组,对应的下标是儿子所表示的字母,内...

algsup 1947

leetcode 208. 实现 Trie (前缀树)【字典树(前缀树)的介绍与思路整理】

leetcode 208 字典树笔记

闯入网络安全的数据分析小白 423

DSA 面试精讲 · Trie 前缀树:一文掌握字符串前缀匹配

本文系统讲解Trie(前缀树/字典树)数据结构及其应用。Trie通过多叉树结构存储字符串集合,实现O(L)时间复杂度的前缀搜索(L为字符串长度),远优于哈希表和二叉搜索树。文章详细剖析LeetCode 208(基础实现)和211(支持通配符搜索)两道典型题目,提供Python/Java/C++三语言实现代码,重点讲解节点设计、插入/搜索/前缀查询三大核心操作及DFS回溯搜索算法。此外,文章还拓展讨论Trie在自动补全、拼写检查等工程场景的应用,以及压缩Trie、双数组Trie等变体结构。

2401_88352165的博客 534

LeetCode 208. Implement Trie (Prefix Tree) 题解

本题是 Trie 树的经典实现。每个节点包含子节点字典和结束标志插入:逐字符构建路径搜索:检查路径是否存在且结束标志为真前缀查询:只检查路径是否存在。

cannonjinx的博客 4069

【图论】LC 208.实现 Trie (前缀树)

本文详解LeetCode 208题“实现Trie(前缀树)”,通过设计包含26个子节点指针和结束标记的节点结构,实现单词插入、精确查找与前缀匹配。核心思想为路径复用与isEnd标记区分完整单词与前缀,时间复杂度均为O(L),空间复杂度为O(Σ·L)。对比哈希表,Trie更优支持前缀操作,适用于自动补全等场景。附带知识扩展:通配符搜索、二维网格单词查找及键值映射等变体应用。

你的博客 303
上一篇: 【重点】【拓扑排序】207.课程表|210.课程表II
下一篇: 【重点】【LRU】146.LRU缓存
Allenlzcoder
博客等级 码龄10年 925粉丝 512原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值