【LeetCode: 208. 实现 Trie (前缀树)】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 前缀树
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 208. 实现 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 。

示例:

输入
[“Trie”, “insert”, “search”, “search”, “startsWith”, “insert”, “search”]
[[], [“apple”], [“apple”], [“app”], [“app”], [“app”], [“app”]]
输出
[null, null, true, false, true, null, true]

解释
Trie trie = new Trie();
trie.insert(“apple”);
trie.search(“apple”); // 返回 True
trie.search(“app”); // 返回 False
trie.startsWith(“app”); // 返回 True
trie.insert(“app”);
trie.search(“app”); // 返回 True

提示:

1 <= word.length, prefix.length <= 2000
word 和 prefix 仅由小写英文字母组成
insert、search 和 startsWith 调用次数 总计 不超过 3 * 104 次

🌟 求解思路&实现代码&运行结果


⚡ 前缀树

🥦 求解思路
  1. 前缀树是一种用于快速查询某个字符串或者字符前缀是否存在的数据结构。核心是使用边来代表有无字符,使用点来记录是否为单词结尾以及其后续字符串的字符。
  2. 定义一个TrieNode类,end表示有无字符串以当前字符结尾,TrieNode[]表示26个TrieNode数组,保存了对当前结点而言下一个可能出现的所有字符的链接。
  3. 插入操作:从根结点的子结点开始与 word每一个字符进行匹配,如果前缀树上没有对应的字符,开始不断new新的结点,直到插入完 word 的最后一个字符,同时还要将最后一个结点end = true,表示它是一个单词的末尾。
  4. 查找操作:从根结点的子结点开始,一直向下匹配,如果出现结点值为空就返回 false,如果匹配到了最后一个字符,只需判断 node.end即可。
  5. 前缀操作:和查找操作类似,只是不需要判断最后一个字符结点的end,因为可以匹配到最后一个字符,肯定有单词以prefix为前缀。
  6. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
class Trie {class TrieNode {boolean end;TrieNode[] tries = new TrieNode[26];}TrieNode root;public Trie() {root = new TrieNode();}public void insert(String word) {TrieNode node = root;for (int i = 0; i < word.length(); i++) {int index = word.charAt(i) - 'a';if (node.tries[index] == null) {node.tries[index] = new TrieNode();}node = node.tries[index];}node.end = true;}public boolean search(String word) {TrieNode node = root;for (int i = 0; i < word.length(); i++) {int index = word.charAt(i) - 'a';if (node.tries[index] == null) {return false;}node = node.tries[index];}return node.end;}public boolean startsWith(String prefix) {TrieNode node = root;for (int i = 0; i < prefix.length(); i++) {int index = prefix.charAt(i) - 'a';if (node.tries[index] == null) {return false;}node = node.tries[index];}return true;}
}/*** Your Trie object will be instantiated and called as such:* Trie obj = new Trie();* obj.insert(word);* boolean param_2 = obj.search(word);* boolean param_3 = obj.startsWith(prefix);*/
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一分钟带你了解--电商控价

电商行业发展至今带来了许多机遇&#xff0c;但同时也伴随着一些挑战。品牌电商在运营过程中&#xff0c;面临着诸如乱价、低价、窜货和假货等问题&#xff0c;这些问题不仅损害了品牌的形象和价值&#xff0c;也破坏了市场秩序&#xff0c;侵害了消费者的权益。 电商控价是解…

深度探讨 Golang 中并发发送 HTTP 请求的最佳技术

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在 Golang 领域&#xff0c;并发发送 HTTP 请求…

java常用API(2)

1&#xff1a;String 1.1 String(构造方法) 首先&#xff0c;我们先来学习String类&#xff0c;它涉及到两个案例&#xff1a;用户登录和聊天室。 先来看用户登录案例&#xff1a;需要输入用户名和密码&#xff0c;和已知的用户名和密码进行比较&#xff0c;涉及到比较的方法…

抖音小店如何选品?新手怎么选有潜力的产品?常用选品玩法分享

大家好&#xff0c;我是电商花花。 选品是我们店铺出单的关键&#xff0c;也是我们做电商行业的小伙伴非常关心的一个点。 我们想要选好商品&#xff0c;我们就要先搞清楚&#xff0c;什么样的产品才算是有潜力的产品&#xff0c;什么样的产品才能出单&#xff0c;什么样的产…

使用pandas读取HTML和JSON数据

大家好&#xff0c;Pandas是一个功能强大的数据分析库&#xff0c;它提供了许多灵活且高效的方法来处理和分析数据。本文将介绍如何使用Pandas读取HTML数据和JSON数据&#xff0c;并展示一些常见的应用场景。 一、读取HTML网页 HTML&#xff08;超文本标记语言&#xff09;是…

【HTML5】 canvas 绘制图形

文章目录 一、基本用法二、用法详见2.0、方法属性2.1、绘制线条2.2、绘制矩形2.3、绘制圆形2.4、绘制文本2.5、填充图像 一、基本用法 canvas 标签&#xff1a;可用于在网页上绘制图形&#xff08;使用 JavaScript 在网页上绘制图像&#xff09;画布是一个矩形区域&#xff0c…

MATLAB R2023b for Mac 中文

MATLAB R2023b 是 MathWorks 发布的最新版本的 MATLAB&#xff0c;适用于进行算法开发、数据可视化、数据分析以及数值计算等任务的工程师和科学家。它包含了一系列新增功能和改进&#xff0c;如改进了数据导入工具&#xff0c;增加了对数据帧和表格对象的支持&#xff0c;增强…

从零到一:设计实现Dubbo分布式服务框架

从零到一&#xff1a;设计实现Dubbo分布式服务框架 前言 Dubbo是一款高性能的Java RPC框架&#xff0c;广泛应用于大规模的分布式系统。本篇博客将详细介绍如何从零开始设计和实现一个简单的Dubbo框架&#xff0c;以便理解Dubbo的核心概念和工作原理。 第一步&#xff1a;定…

医疗电子市场分析:预计2029年将达到2204亿美元

随着人口老龄化趋势日益明显&#xff0c;高效、精准、全面的医疗服务需求将迅速增长&#xff0c;医疗电子行业将迎来广阔的市场前景。医疗电子是指将电子技术和信息技术与医学相结合&#xff0c;应用于医疗领域的技术和产品。其主要目的是通过电子技术来实现医疗设备和系统的智…

面试150-69(Leetcode104二叉树的最大深度)

代码&#xff1a; 0117 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode righ…

Python | 五、面向对象、Class类

面向对象 各类事物在编程语言中可以表示为抽象的类 属性用来表示类的基本特征方法用来实现类的基本功能 为了把事物具体化&#xff0c;需要通过创建实例化对象来完成 Class类的定义 命名&#xff0c;使用大驼峰标准&#xff0c;如class MyName:class类中有一个self参数&…

手机上最危险的3个操作,千万小心!

普通人千万不要在手机上做这3个操作&#xff0c;否则你的手机早晚会被黑客入侵了。 第一种&#xff0c;苹果越狱 越狱虽然可以绕过限制给你的苹果安装上一些特殊软件&#xff0c;但只要是越狱之后的苹果手机&#xff0c;都将留下漏洞&#xff0c;黑客最喜欢寻找做过越狱的手机…

nginx离线安装

安装包准备&#xff1a; 上传安装包到linux系统 一、进入gcc目录&#xff0c;执行以下命令 rpm -Uvh *.rpm --nodeps --force gcc -v查看版本 二、 进入gcc-c目录&#xff0c;执行命令 rpm -Uvh *.rpm --nodeps --force g -v查看版本 三、安装PCRE 解压&#xff1a; t…

众和策略:券商又念“紧箍咒” 绕标套现的头疼了

又有券商对两融事务念“紧箍咒”。 近来&#xff0c;记者从广发证券获悉&#xff0c;该公司已发布《关于调整融资融券负债归还规矩的告诉》&#xff0c;自2024年1月15日起&#xff0c;决议禁止融资买入证券用于归还融券负债。 相关业内人士以为&#xff0c;自上一年10月融资融…

华为交换机配置NQA DNS检测IP网络DNS解析速度

华为HCIA视频教程&#xff1a;超级实用&#xff0c;华为VRP系统文件详解 华为HCIA视频教程&#xff1a;不会传输层协议&#xff0c;HCIA都考不过 华为HCIA视频教程&#xff1a;网络工程师的基本功&#xff1a;网络地址转换NAT 华为HCIP视频教程&#xff1a;DHCP协议原理与配…

js 正则表达式 校验 input输入框 输入格式必须为日期yyyyMM

要使用正则表达式校验 input 输入框的输入格式是否为日期格式 “yyyyMM”&#xff0c;你可以使用以下 JavaScript 正则表达式&#xff1a; const regex /^(\d{4})(\d{2})$/;这个正则表达式匹配的是四位数年份和两位数月份&#xff0c;确保输入的格式为 “yyyyMM”。 以下是一…

Qt-setIcon无法加载图片为图标

当使用 添加Qt资源 来添加一个图片为图标时&#xff0c;按照以下流程&#xff1a; 1、右键点击.pro工程&#xff0c;选择在“Explorer中显示”&#xff0c; 将包含图片的文件夹放在该路径下&#xff1b; 2、右键单击工程项目&#xff0c;点击Add new 3、依次选择Qt→Qt Reso…

安防视频云平台/可视化监控云平台ARM版EasyCVR无法下载录像文件,如何解决?

视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。GB28181视频监控/AI智能大数据视频分析EasyCVR平台已经广泛应用在工地…

网络工程师:计算机基础知识面试题(一)

48.什么是程序局部性&#xff1f;为什么会有程序的空间局部性&#xff1f; 程序局部性是指程序在执行过程中&#xff0c;对于数据或者指令的访问具有集中的倾向性。它可以分为时间局部性和空间局部性两种。 程序的空间局部性是指程序在一段时间内对于某一特定数据或指令的访问&…

如何使用Docker本地搭建Traefik服务并实现公网访问管理界面

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件&#xff0c;能轻易的部署微服务。它支持多种后端 (D…