leetcode 208. Implement Trie (Prefix Tree)(实现Trie)

STM32F407VET6与CH395Q串口通信实战:从零搭建以太网客户端(附完整代码) 本文详细介绍了基于STM32F407VET6微控制器与南京沁恒微CH395Q以太网芯片,通过串口通信从零搭建TCP客户端应用的完整实战过程。内容涵盖硬件连接、驱动层设计、基于FreeRTOS的任务实现以及核心调试技巧,并提供了完整的代码示例,帮助嵌入式开发者快速实现设备联网功能。 阅读详情

在这里插入图片描述
实现Trie结构,具有插入单词,查找完整单词,查找单词前缀的作用。

思路:

首先要说下什么是trie,比如在string中搜索pattern

在banana中搜索“ban", “ana”, "nab"这几个pattern,那么就需要一次一个pattern地搜,但是在pattern很多的时候复杂度就会是O(average pattern.length * pattern num*text.length)

trie就是把很多string pattern整合在一起,然后搜索的时候可以减掉pattern num这一项

比如ba和bb,组合成
在这里插入图片描述
因此在baabb中搜索ba和bb时,可以通过一个trie一次满足

如果在上述trie中再insert一个b,trie会变成

在这里插入图片描述

这时候说下search,search有full search和prefix search,就是完全相同,或者是否以pattern开头。如果是完全相同方式搜索,当搜索ba时,会走bab路径,这时候如何判断ba是一个完整的字符串,还是bab的一部分?就需要一个boolean值endOfWord来判断,endOfWord=true时,就知道a已经是子字符串的终点。

所以定义TrieNode结构,需要包含一个指向下一节点的TrieNode指针,和一个endOfWord的boolean值。因为可能有多个children,所以用Map来定义children。

class TrieNode{
    Map<Character, TrieNode> children;
    boolean endOfWord;
    
    public TrieNode(){
        children = new HashMap<>();
        endOfWord = false;
    }
}

插入操作时,先看当前字母在trie中是否存在,如果存在,走向它的下一节点,如果不存在,建立新的TrieNode。当走到最后一个字母时,endOfWord设为 true

    public void insert(String word) {
        char ch = 0;
        TrieNode current = root;
        TrieNode node;
        
        for(int i = 0; i < word.length(); i++) {
            ch = word.charAt(i);
            node = current.children.get(ch);
            if(node == null) {
                node = new TrieNode();
                current.children.put(ch, node);
            }
            current = node;
        }
        current.endOfWord = true;
    }

新建一个Trie时,只需建立一个root和它的一个空children

    private final TrieNode root;
    
    public Trie() {
        root = new TrieNode();
    }

完全搜索和前缀搜索的区别只是走到最后一个字母时,看endOfWord是否为true

    public boolean search(String word) {
        char ch = 0;
        TrieNode current = root;
        TrieNode node;
        
        for(int i = 0; i < word.length(); i++) {
            ch = word.charAt(i);
            node = current.children.get(ch);
            if(node == null) {
                return false;
            }
            current = node;
        }
        if(!current.endOfWord) {
            return false;
        }
        return true;
    }

    public boolean startsWith(String prefix) {
        char ch = 0;
        TrieNode current = root;
        TrieNode node;
        
        for(int i = 0; i < prefix.length(); i++) {
            ch = prefix.charAt(i);
            node = current.children.get(ch);
            if(node == null) {
                return false;
            }
            current = node;
        }
        
        return true;
    }
}

因为题目中说word和prefix只含有小写英文字母,那么就不需要用hashMap, 用一个长度为26的数组即可。
通过数组下标查找key.

class Trie {
    Node root;

    public Trie() {
        root = new Node();
    }
    
    public void insert(String word) {
        Node cur = root;
        Node tmpNode;
        for(int i = 0; i < word.length(); i++) {
            int idx = word.charAt(i) - 'a';
            tmpNode = cur.children[idx];
            if(tmpNode == null) {
                tmpNode = new Node();
                cur.children[idx] = tmpNode;
            }
            cur = tmpNode;
        }
        cur.isEnd = true;
    }
    
    public boolean search(String word) {
        Node cur = root;
        Node tmpNode;
        for(int i = 0; i < word.length(); i++) {
            int idx = word.charAt(i) - 'a';
            tmpNode = cur.children[idx];
            if(tmpNode == null) return false;
            cur = tmpNode;
        }
        if(!cur.isEnd) return false;
        return true;
    }
    
    public boolean startsWith(String prefix) {
        Node cur = root;
        Node tmpNode;
        for(int i = 0; i < prefix.length(); i++){
            int idx = prefix.charAt(i) - 'a';
            tmpNode = cur.children[idx];
            if(tmpNode == null) return false;
            cur = tmpNode;
        }
        return true;
    }
}

class Node{
    Node[] children;
    boolean isEnd;

    Node() {
        children = new Node[26];
    }
}
【案例讲解】LVGL关于旋转的配置 在实现项目中,因为横竖屏的关系,需要对其做90度的旋转。配置旋转时发现一些局部刷新控件,旋转后效果不对。异常图标正常图标。 阅读详情

相关推荐

AWR射频仿真基本操作(一)

这里只讲述一个基本的操作: 软件是AWR 14版本

钢丝 2万+

trie(字典树、前缀树)

trie(字典树、前缀树) 1. trie原理 原理 trie树,又被称为字典树、前缀树,是一种高效地存储和查找字符串集合的数据结构。 一般来说,用到trie的题目中的字母要么全是小写字母,要么全是大写字母,要么全是数字,要么就是0和1。也就是说字母的个数不是很多。 如下是一个trie树的例子: 真实存储中,图中的每个字符都是被存储在边上的,节点是不存储字符信息的。 查询某个字符串S是否在这个字符串集合中是否存在的话,可以从根开始遍历,当遍历到空节点或者S已经遍历结束但是trie树中对应节点不是

weixin_42638946的博客 3664

1.3、云计算HCIP融合存储产品及部署

目标:描述Oceanstor V3系列存储产品系统组成及产品定位 描述Oceanstor V3硬件结构及软件架构 掌握存储系统与主机系统之间的连接 一、存储型号 低端型存储:Oceanstor 2200 2600 2800 V3/V5 终端型存储:Oceanstor 5300 5500 5600 5800 6800 V3/V5 高端型存储:Oceanstor 18000 二、Oceanstor V3系列存储系统定位 OceanStor V3系列存储系统是华为根据存储产品应用现状和存储

weixin_43666279的博客 1653

字典树简介

字典树(Trie)又名前缀树或单词查找树,最初是由美国计算机科学家 Edward Fredkin 在 1960 年提出。字典树是一种基于字符串序列的树形结构,可以高效地存储和检索字符串集合中的所有字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。字典树的优点是利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。字典树的核心思想是空间换时间,利用字符串的公共前缀减少查询时间以提高查询效率。

Doublelv 的博客专栏。 2214

铁路场景雷达点云目标识别与追踪系统

本文介绍了一种基于毫米波雷达的铁路货运车站安全监控系统。该系统采用分布式架构,通过多个毫米波雷达节点采集点云数据,经过坐标转换、多雷达融合等处理后,利用机器学习算法实现列车、行人等目标的实时识别与追踪。系统包含数据采集层、处理层、目标识别层、追踪层、预警决策层和可视化层,能够克服传统视频监控受环境影响大的缺点,实现全天候可靠监测。文中详细展示了雷达数据解析和点云预处理的代码实现,包括坐标转换、数据格式解析和体素网格滤波等关键技术。该系统可有效预警铁路场景下的碰撞风险,提升货运车站的安全管理水平。

huanghm88的专栏 125

SPI协议详解(图文并茂+超详细)

先说串口 因为之前写过一篇UART,通用串行异步通讯协议,UART的相关资料 因为UART没有时钟信号,无法控制何时发送数据,也无法保证双发按照完全相同的速度接收数据。因此,双方以不同的速度进行数据接收和发送,就会出现问题。 如果要解决这个问题,UART为每个字节添加额外的起始位和停止位,以帮助接收器在数据到达时进行同步; 双方还必须事先就传输速度达成共识(设置相同的波特率,例如每秒9600位)。 传输速率如果有微小差异不是问题,因为接收器会在每个字节的开头重新同步。相应的协议如下图所示; 如果您注意到

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 33万+

数据结构:Trie(前缀树/字典树)

Trie 又称字典树、前缀树和单词查找树,是一颗非典型的多叉树模型,即每个结点的分支数量可能为多个。Trie这个名字取自“retrieval”,检索,读音和 try 相同。

m0_63997099的博客 3950

GEE:提取研究区 NDVI/LST/RVI 并进行时间序列线性插值填补缺失像素和Savitsky-Golay(SG)滤波平滑处理

养乐多_本文将介绍使用Landsat数据集,构建时间序列,并使用线性插值算法填补缺失数据,或者去云空洞,并进一步对完整的时间序列数据进行SG滤波处理。

养乐多的博客 3196

Trie(字典树/前缀树)

字典树/前缀树

weixin_45746505的博客 3548

基于jeecgboot3.9.0的项目管理——项目工作台(二)

基于jeecgboot3.9.0的项目管理——项目工作台(二)

宁波阿成的博客 205

KEPServerEX 6 之驱动协议(UDD)实战 HTTP协议对接OpenWeatherMap天气 API全流程指南

本文分享了基于 KEPServerEX 6 的通用设备驱动(UDD)对接OpenWeatherMap天气API的实战方案。该方案针对工业物联网场景进行了深度优化,具有动态城市切换、运行时热配置、老旧JS引擎兼容等核心特性。文章详细介绍了从环境准备、脚本部署到Tag配置的全流程,重点解析了Legacy JS语法适配、Float类型安全处理等关键实现细节,并提供了完整的避坑指南和故障排查方法。该方案经过生产环境验证,可稳定实现气象数据采集与动态切换功能,适用于SCADA/MES系统集成场景。

-雲飛兄-博客 712

字典树(Trie/前缀树)

Trie 字典树 前缀树

good good study, day day up! 7867

某勾网之登录过程逆向

拉勾网的登录过程逆向,包含请求头(X-S-HEADER、X-K-HEADER、X-SS-REQ-HEADER等) 以及 请求参数/返回数据的加解密。

shanf7921的博客 3万+

LeetCode 208 Implement Trie (Prefix Tree)(实现前缀树)(*)

翻译实现一个包含insert,search和startsWith方法的前缀树。备注: 你可以假定所有的输入只包含小写字母a-z。原文Implement a trie with insert, search, and startsWith methods.Note: You may assume that all inputs are consist of lowercase letters a-z.

nomasp 3403

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数学建模模型总结

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

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

Leetcode 208.实现 Trie (前缀树) 1 题目描述(Leetcode题目链接)   实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。 Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // 返回 true trie.search("...

qq_39378221的博客 504

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LeetCode(208):实现 Trie (前缀树) Implement Trie (Prefix Tree)(Java)

2019.5.3 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) 数据结构题。 前缀树的存在主要是为了解决:给定键值字符串S=[S1……Sn],找字符串q与S的最长公共前缀的问题。前缀树实现包括结点类和前缀树类,实现方式如下: TrieNode 树节点类 类型/返回类型 成员/方法 说明/实现方式 int R 代表可能的字符值数量,决定links长度,一般...

NJU_ChopinXBP的博客 491

VC中sqlite的使用

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

LeetCode—208.实现 Trie (前缀树)(Implement Trie (Prefix Tree))——分析及代码(C++、Java)

LeetCode—208.实现 Trie [前缀树][Implement Trie [Prefix Tree]]——分析及代码[C++] 一、题目 二、分析及代码 1. 前缀树 (1)思路 (2)代码 (3)结果 三、其他 一、题目 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。 示例: Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // 返回

江南土豆的博客 517

leetcode前缀树java_LeetCode 208. Implement Trie (Prefix Tree) 实现 Trie (前缀树)(C++/Java)

题目:Implement a trie withinsert,search, andstartsWithmethods.Example:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // returns truetrie.search("app"); // returns falsetrie....

weixin_33241808的博客 140

LeetCode 208: Implement Trie (Prefix Tree)

Implement a trie with insert, search, and startsWith methods. Note: You may assume that all inputs are consist of lowercase letters a-z. 前缀查找树,简单的可以实现为一种26叉树。需要在节点上增加一个字段,标明该节点是否是一个单词,还是仅仅是单词的前缀。代码

哈哈的个人专栏 4107

LeetCode 208. Implement Trie (Prefix Tree) 题解

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

cannonjinx的博客 4069

【LeetCode】208. Implement Trie (Prefix Tree) 实现 Trie (前缀树)

【LeetCode】208. Implement Trie (Prefix Tree) 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/implement-trie-prefix-tree/description/ 题目描述: Implement a trie with insert, searc...

负雪明烛 5027

Leetcode 208: Implement Trie (Prefix Tree)

Implement Trie (Prefix Tree) Total Accepted: 601 Total Submissions: 2396 Implement a trie with insert, search, and startsWith methods. Note: You may assume that all inputs are consist of

西施豆腐渣 5065

[LeetCode 208] Implement Trie (Prefix Tree)

Implement a trie with insert, search, and startsWith methods. Note: You may assume that all inputs are consist of lowercase letters a-z. class TrieNode { boolean exist = false; TrieNo

coder 进阶的专栏 1092

[Leetcode] 208. Implement Trie (Prefix Tree) 解题报告

题目: Implement a trie with insert, search, and startsWith methods. Note: You may assume that all inputs are consist of lowercase letters a-z. 思路: 前缀树(Prefix Tree,也称Trie)是一种表示英文字典的典型数据结构,它可

魔豆(Magicbean)的博客 693

[leetcode] 208. Implement Trie (Prefix Tree)

Description Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // returns true trie.search("app"); // ret...

Learning from the mistakes 174

LeetCode 208. Implement Trie (Prefix Tree)

题目描述:实现Trie树的查找、查找前缀、插入等操作。 题目链接:LeetCode 208. Implement Trie (Prefix Tree) 代码如下: class Trie: def __init__(self): """ Initialize your data structure here. """ s...

Za七杂⑧ 456
上一篇: Leetcode 53. Maximum Subarray(最大子数组)
下一篇: Leetcode Majority Element (投票法)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值