面试算法62:实现前缀树

题目

请设计实现一棵前缀树Trie,它有如下操作。

  • 函数insert,在前缀树中添加一个字符串。
  • 函数search,查找字符串。如果前缀树中包含该字符串,则返回true;否则返回false。
  • 函数startWith,查找字符串前缀。如果前缀树中包含以该前缀开头的字符串,则返回true;否则返回false。

例如,调用函数insert在前缀树中添加单词"goodbye"之后,输入"good"调用函数search返回false,但输入"good"调用函数startWith则返回true。再次调用函数insert添加单词"good"之后,此时再输入"good"调用函数search则返回true。

分析

首先定义前缀树中节点的数据结构。前缀树中的节点对应字符串中的一个字符。如果只考虑英文小写字母,那么字符可能是从’a’到’z’的任意一个,因此前缀树中的节点可能有26个子节点。可以将26个子节点放到一个数组中,数组中的第1个元素是对应字母’a’的子节点,第2个元素是对应字母’b’的子节点,其余的以此类推。

public class Trie {private TrieNode root;public Trie() {root = new TrieNode();}class TrieNode {TrieNode children[];boolean isWord;public TrieNode() {children = new TrieNode[26];}}public static void main(String[] args) {Trie trie = new Trie();trie.insert("apple");System.out.println(trie.search("apple"));System.out.println(trie.search("app"));System.out.println(trie.startsWith("app"));trie.insert("app");System.out.println(trie.search("app"));}public void insert(String word) {TrieNode node = root;for (char ch : word.toCharArray()) {// 对应的位置存放一个链接,相应位置有值则代表有相应的字母if (node.children[ch - 'a'] == null) {node.children[ch - 'a'] = new TrieNode();}node = node.children[ch - 'a'];}node.isWord = true;}public boolean search(String word) {TrieNode node = root;for (char ch : word.toCharArray()) {if (node.children[ch - 'a'] == null) {return false;}node = node.children[ch - 'a'];}return node.isWord;}public boolean startsWith(String prefix) {TrieNode node = root;for (char ch : prefix.toCharArray()) {if (node.children[ch - 'a'] == null) {return false;}node = node.children[ch - 'a'];}return true;}
}

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

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

相关文章

16.仿简道云公式函数实战-钉钉宜搭逻辑函数-加餐

1. 前言 钉钉宜搭中也有公式组件,发现在钉钉宜搭中逻辑函数有EQ、NE、LT、GT、LE、GE.虽然在QLExpress中也有对应的实现,但为了考虑系列文章的完整性,笔者在这篇文章加餐EQ、NE、LT、GT、LE、GE六个函数的实现 2. 函数说明 函数名表达式入参返回值EQ判断相等EQ(value1,val…

展开说说:Android之常用的延时执行策略

总结了以下六种常用的Android延时执行策略,以此记录: 1、TimerTask 2、Handler.postDelayed 3、Handler.sendEnptyMessageDelayeed 4、Thread.sleep线程休眠-需要在子线程 5、使用AlarmManager-全局定时器或者闹钟 6、Wait 首先定义一个时间常量&…

Ubuntu20.04 下编译安装 ffmpeg 和 ffplay

Ubuntu20.04 下编译安装 ffmpeg 和 ffplay 一、下载源码包二、安装依赖库三、编译四、添加环境变量五、验证是否成功六、问题 一、下载源码包 1.1 官方下载链接:http://ffmpeg.org/download.html 最新版本为6.1,点击 Download Source Code下载即可 &…

四、Spring IoC实践和应用(基于XML配置方式组件管理)

本章概要 基于XML配置方式组件管理 实验一: 组件(Bean)信息声明配置(IoC)实验二: 组件(Bean)依赖注入配置(DI)实验三: IoC 容器创建和使用实验四…

Python基础-函数与方法

第六章函数与方法 6.1、公共方法 加法运算适用于所有的基础数据类型(int float bool)加法运算所有两侧要是同种数据类型加法运算再容器类型中是拼接的意思,不是相加计算值 # 法运算,都可以用于哪些数据类型之间 # int float bool 肯定可以…

自助借还办证一体机软件需求说明书

1. 简介 1.1 项目概括 本项目主要实现读者自助办证、借书、还书、查询、续借的功能,减轻管理员的工作量,提升读者的借阅体验,提高了图书的借阅量与流通率,是图书馆智能化、无人化建设的重要步骤。 1.2 项目背景 ​ 目前各大图…

WEB渗透—PHP反序列化(四)

Web渗透—PHP反序列化 课程学习分享(课程非本人制作,仅提供学习分享) 靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场 课程地址:PHP反序列化漏洞学习_哔哩…

使用 React 实现自定义数据展示日历组件

目录 背景实现日历组件父组件数据 效果最后 背景 项目中需要实现一个日历组件,并且需要展示月,日所对应的数据(因为项目需求问题,就不统计年数据总量)。网上找了一堆,基本都不大符合项目需求,且…

OpenHarmony鸿蒙原生应用开发,ArkTS、ArkUI学习踩坑学习笔记,持续更新中。

一、AMD处理器win10系统下,DevEco Studio模拟器启动失败解决办法。 结论:在BIOS里面将Hyper-V打开,DevEco Studio模拟器可以成功启动。 二、ArkTS自定义组件导出、引用实现。 如果在另外的文件中引用组件,需要使用export关键字导…

3ds max软件中的一些常用功能分享!

3ds max软件有很多小伙伴反馈说,明明有很多3ds max教程资料。却不知道如何入门3dmax。 掌握3dmax基本功能是开始使用3dmax的基础之一,所以,小编带大家盘点一下3dmax常用操作。 3dmax常用功能介绍如下,快快跟着小编一起看起来。 1…

预测性维护在汽车制造行业中的应用

汽车制造行业是一个高度复杂和精细化的领域,依赖于各种设备来完成生产流程。这些设备包括机械装配线、焊接机器人、喷涂设备、传送带等。然而,这些设备在长时间运行中不可避免地会遇到各种故障,给生产进程带来延误和成本增加。为了应对这一挑…

可变参数详解

概述 可变参数用在形参中可以接收多个数据。 可变参数的格式:数据类型...参数名称。 可变参数在方法内部本质上就是一个数组。 可变参数的作用 传输参数非常灵活,方便。可以不传输参数,可以传输1个或者多个,也可以传输一个数…

61道MyBatis高频题整理(附答案背诵版)

1、介绍下MyBatis? MyBatis是一个基于Java的持久层框架,它封装了底层的JDBC操作,大大简化了数据库操作的复杂性。MyBatis的主要特点包括: SQL语句与Java代码的分离:MyBatis允许你直接在XML文件中编写SQL语句,这样可以…

LeetCode Hot100 79.单词搜索

题目: 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那…

快速幂算法C++

快速幂算法C 一个简单例子快速了解例题代码 一个简单例子快速了解 计算 2的13次方,首先,我们将指数13转换为二进制形式,得到1101。 然后,我们从右到左遍历每一位: 第一位是1,所以我们将结果乘以 2的20次…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Button按钮组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Button按钮组件 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、Button按钮组件 Button 组件也是基础组件之一,和其它基础组件不…

metric和log

Metric(指标)和 Log(日志)是两种不同的监控数据类型,它们在监控和故障排查中有不同的用途和特点。 Metric(指标): 定义: Metric 是定量的度量,通常是数值或计数&#xf…

鸿蒙开发之数据持久化存储Preferences

用户首选项(Preferences)提供的是key-value键值对的方式处理数据。类似于iOS开发中的NSUserDefault,主要针对的是轻量化数据的存储。如:字体大小、用户的信息等。 其中,key为字符串类型,value是string、nu…

Linux之grep、sed、awk

目录 1.grep 2.sed 3.awk 1.grep grep 擅长过滤查找,按行进行过滤 例: 当有用户对我们的主机进行爆破攻击时,我们可以使用grep将 ip 查找出来,进行封锁等处理 在 /var/log 目录下的 secure 文件中存放在用户登录连接信息&am…

信息搜集简要总结

信息搜集 一.遍历目录: ​ 可以使用dirsearch和御剑等目录扫描软件来进行目录遍历,得到一些信息,注意,有的时候扫不出来(我使用dirsearch的时候经常出现扫不出来的时候,因此有的时候可以rce或者传马蚁剑连…