字典树(前缀树)哈希表实现(能查所有字符)

Node2类:表示Trie树的节点。每个节点有三个属性:pass:表示经过该节点的次数,即有多少个字符串经过了这个节点。
end:表示以该节点结尾的字符串数量,即有多少个字符串在这个节点结束。
nexts:是一个HashMap,用于存储指向下一个节点的映射。键是字符的ASCII码,值是对应的下一个节点。Trie2类:实现了具体的Trie树功能。它有一个根节点root,以及以下方法:insert(String word):向Trie树中插入一个字符串。首先将字符串转换为字符数组,然后从根节点开始遍历字符数组,对于每个字符,如果当前节点的nexts映射中没有对应的节点,就创建一个新的节点并添加到映射中。最后,将最后一个字符对应的节点的end计数加一。
delete(String word):从Trie树中删除一个字符串。首先检查该字符串是否存在,如果存在,则按照插入的顺序逆序遍历字符数组,对于每个字符,将对应节点的pass计数减一,如果某个节点的pass计数变为0,说明没有其他字符串经过这个节点,可以将其从映射中移除。最后,将最后一个字符对应的节点的end计数减一。
search(String word):在Trie树中查找一个字符串。首先将字符串转换为字符数组,然后从根节点开始遍历字符数组,对于每个字符,如果在当前节点的nexts映射中找不到对应的节点,说明该字符串不存在于Trie树中,返回0。否则,继续遍历下一个字符。最后,返回最后一个字符对应的节点的end计数,表示有多少个字符串以该字符串结尾。
prefixNumber(String pre):计算有多少个字符串的前缀与给定的前缀相同。首先将前缀转换为字符数组,然后从根节点开始遍历字符数组,对于每个字符,如果在当前节点的nexts映射中找不到对应的节点,说明没有字符串的前缀与给定的前缀相同,返回0。否则,继续遍历下一个字符。最后,返回最后一个字符对应的节点的pass计数,表示有多少个字符串的前缀与给定的前缀相同。
import java.util.HashMap;public class test6 {public static class Node2{public int pass;public int end;public HashMap<Integer , Node2> nexts;public Node2(){pass = 0;end = 0;nexts = new HashMap<>();}}public static class Trie2{private Node2 root;public Trie2(){root = new Node2();}public void insert(String word){if(word == null){return;}char[] chs = word.toCharArray();Node2 node = root;node.pass++;int index = 0;for (int i = 0; i < chs.length; i++) {index = (int) chs[i];if(!node.nexts.containsKey(index)){node.nexts.put(index , new Node2());}node = node.nexts.get(index);node.pass++;}node.end++;}public void delete(String word){if(search(word) != 0){char[] chs =  word.toCharArray();Node2 node = root;node.pass--;int index =0;for (int i = 0; i < chs.length; i++) {index = (int) chs[i];if(--node.nexts.get(index).pass == 0){node.nexts.remove(index);return;}node = node.nexts.get(index);}node.end--;}}public int search(String word){if(word == null){return 0;}char[] chs  = word.toCharArray();Node2 node = root;int index = 0;for (int i = 0; i < chs.length; i++) {index = (int) chs[i];if(!node.nexts.containsKey(index)){return 0;}node = node.nexts.get(index);}return node.end;}public int prefixNumber(String pre){if(pre == null){return 0;}char[] chs =pre.toCharArray();Node2 node = root;int index = 0;for (int i = 0; i < chs.length; i++) {index = (int) chs[i];if(!node.nexts.containsKey(index)){return 0;}node = node.nexts.get(index);}return node.pass;}}
}

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

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

相关文章

【数据脱敏】⭐️SpringBoot 整合 Jackson 实现隐私数据加密

目录 &#x1f378;前言 &#x1f37b;一、Jackson 序列化库 &#x1f37a;二、方案实践 2.1 环境准备 2.2 依赖引入 2.3 代码编写 &#x1f49e;️三、接口测试 &#x1f379;四、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;最近也是很忙啊&#xff0c;上次的文章…

C++与VLC制作独属于你的动态壁纸背景

文章目录 前言效果展示为什么要做他如何实现他实现步骤获取桌面句柄代码获取桌面句柄libvlc_media_player_set_hwnd函数 动态壁纸代码 总结 前言 在当今的数字世界中&#xff0c;个性化和自定义化的体验越来越受到人们的欢迎。动态壁纸是其中一种很受欢迎的方式&#xff0c;它…

【教学类-70-01】20240722镜子花边(适配5CM圆镜)

背景需求 我想给孩子们做一个小圆镜&#xff0c;花边涂色&#xff0c;打洞&#xff0c;做一个项链样式 1、使用通义万相生成了“圆形镜子&#xff0c;有花边” 边缘细&#xff0c;黑色面积大的图片放到另外一个文件夹里&#xff08;不用&#xff09; 从性价比角度&#xff…

Qt窗口介绍

Qt窗口 一、Qt窗口二、菜单栏创建菜单栏在菜单栏中添加菜单创建菜单项在菜单项之间添加分割线综合练习 三、工具栏创建工具栏设置停靠位置设置浮动属性设置移动属性综合练习 四、状态栏状态栏的创建在状态栏中显示实时消息在状态栏显示永久的消息 五、浮动窗口浮动窗口的创建设…

ArcGIS Pro SDK (九)几何 12 多面体

ArcGIS Pro SDK &#xff08;九&#xff09;几何 12 多面体 文章目录 ArcGIS Pro SDK &#xff08;九&#xff09;几何 12 多面体1 通过拉伸多边形或折线构建多面体2 多面体属性3 构建多面体4 通过MultipatchBuilderEx构建多面体5 从另一个多面体构建多面体6 从 3D 模型文件构建…

Vue的计算属性和方法有什么区别

Vue中的计算属性&#xff08;computed&#xff09;和方法&#xff08;methods&#xff09;都是用于处理数据和逻辑的重要特性&#xff0c;但它们之间存在一些关键的区别。以下是两者的主要区别&#xff1a; 1. 缓存性 计算属性&#xff1a;计算属性是基于它们的依赖进行缓存的…

Pytorch实现图像分类-水果数据集分类--深度学习大作业

目录 1.概述 2.设计 3.实现 4.实验 5.总结 1.概述 本次深度学习大作业&#xff0c;我使用AlexNet模型对"Fruits-360"数据集中的两部分水果和蔬菜图片进行分类 2.设计 模型设计&#xff1a;Alexnet网络 卷积层部分&#xff1a;构建了一系列卷积层、激活函数…

【等保测评】服务器——Windows server 2012 R2

文章目录 **身份鉴别****访问控制****安全审计****入侵防范****恶意代码防范****可信验证****测评常用命令** Windows服务器安全计算环境测评 测评对象&#xff1a;Windows server 2012 R2 身份鉴别 &#xff08;高风险&#xff09;应对登录的用户进行身份标识和鉴别&#x…

【爱上C++】list用法详解、模拟实现

文章目录 一&#xff1a;list介绍以及使用1.list介绍2.基本用法①list构造方式②list迭代器的使用③容量④元素访问⑤插入和删除⑥其他操作image.png 3.list与vector对比 二&#xff1a;list模拟实现1.基本框架2.节点结构体模板3.__list_iterator 结构体模板①模板参数说明②构…

CentOS8无论安装更新什么都出现错误: Failed to download metadata for repo ‘AppStream‘

CentOS 已经停止维护&#xff0c;需要将镜像从 mirror.centos.org 更改为 vault.centos.org&#xff0c;依次执行以下命令即可: 1、cd /etc/yum.repos.d/ 2、sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-* 3、sed -i s|#baseurlhttp://mirror.centos.org|baseu…

【无人机】低空经济中5G RedCap芯片的技术分析报告

1. 引言 图一. 新基建&#xff1a;低空经济 低空经济作为一种新兴的经济形态&#xff0c;涵盖了无人机、电动垂直起降飞行器&#xff08;eVTOL&#xff09;、低空物流、空中交通管理等多个领域。随着5G网络的普及和演进&#xff0c;5G RedCap&#xff08;Reduced Capability&a…

Typora 1.5.8 版本安装下载教程 (轻量级 Markdown 编辑器),图文步骤详解,免费领取(软件可激活使用)

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Typora是一款基于Markdown语法的轻量级文本编辑器&#xff0c;它的主要目标是为用户提供一个简洁、高效的写作环境。以下是Typora的一些主要特点和功能&#xff1a; 实时预览&#xff1a;Typora支持实时预览功能&#xff0…

笔记:Enum中FlagsAttribute特性的用法

一、目的&#xff1a;分享Enum中FlagsAttribute特性的用法 在C#中&#xff0c;Enum&#xff08;枚举&#xff09;类型可以使用[Flags]属性来表示一个枚举可以存储多个值。这是通过按位运算符&#xff08;如|&#xff08;或&#xff09;和&&#xff08;与&#xff09;&#…

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 多选题序号1

基础认证题库请移步&#xff1a;HarmonyOS应用开发者基础认证题库 注&#xff1a;有读者反馈&#xff0c;题库的代码块比较多&#xff0c;打开文章时会卡死。所以笔者将题库拆分&#xff0c;单选题20个为一组&#xff0c;多选题10个为一组&#xff0c;题库目录如下&#xff0c;…

腾讯云简单部署MYSQL 8.0

1.安装MySQL8.0资源库 yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm2.安装MySQL8.0 yum -y install mysql-community-server --nogpgcheck . yum -y install mysql-community-server --nogpgcheck 3.启动MySQL并配置开机自启 sys…

【效率提升】程序员常用Shell脚本

文章目录 常用Shell脚本一. 定期更新分区数据二、获取系统资源的使用情况 常用Shell脚本 一. 定期更新分区数据 在某些场景下&#xff0c;我们需要对N年前某一分区的数据进行删除&#xff0c;并添加今年该对应分区的数据&#xff0c;实现数据的流动式存储。 #!/bin/bash dt$…

【devops】ttyd 一个web版本的shell工具 | web版本shell工具 | web shell

一、什么是 TTYD ttyd是在web端一个简单的服务器命令行工具 类似我们在云厂商上直接ssh链接我们的服务器输入指令一样 二、安装ttyd 1、macOS Install with Homebrew: brew install ttydInstall with MacPorts: sudo port install ttyd 2、linux Binary version (recommend…

引入js的script标签如何做到异步加载

使用defer和async属性后&#xff0c;JavaScript加载和HTML解析之间的关系有所不同。了解这些差异可以帮助优化网页加载性能。 defer属性 行为&#xff1a; 当使用defer属性时&#xff0c;浏览器会异步加载JavaScript文件&#xff0c;不会阻塞HTML的解析。所有带有defer属性的…

Leetcode 3223. Minimum Length of String After Operations

Leetcode 3223. Minimum Length of String After Operations 1. 解题思路2. 代码实现 题目链接&#xff1a;3223. Minimum Length of String After Operations 1. 解题思路 这一题还是比较简单的&#xff0c;其实就是想明白对于任何一个字符&#xff0c;如果其个数在3个或以…

神经网络中如何优化模型和超参数调优(案例为tensor的预测)

总结&#xff1a; 初级&#xff1a;简单修改一下超参数&#xff0c;效果一般般但是够用&#xff0c;有时候甚至直接不够用 中级&#xff1a;optuna得出最好的超参数之后&#xff0c;再多一些epoch让train和testloss整体下降&#xff0c;然后结果就很不错。 高级&#xff1a;…