当前位置: 首页 > news >正文

字典树(前缀树)数组实现(只能查26个单词)

这段代码实现了一个基于 Trie 树的字典树(Trie)数据结构,用于存储和检索字符串。其中包含以下几个方法.
insert(String word): 向 Trie 树中插入一个单词。首先将单词转换为字符数组,然后遍历字符数组,逐个字符在 Trie 树中创建节点。每建一个节点,就将该节点的 pass 计数加一。最后将最后一个字符对应的节点的 end 计数加一。
search(String word): 在 Trie 树中查找一个单词。首先将单词转换为字符数组,然后遍历字符数组,逐个字符在 Trie 树中查找对应的节点。如果找不到某个字符对应的节点,说明该单词不存在于 Trie 树中,返回 0。否则继续查找下一个字符。最后返回最后一个字符对应的节点的 end 计数。
prefixNumber(String pre): 计算 Trie 树中以给定前缀开头的单词数量。首先将前缀转换为字符数组,然后遍历字符数组,逐个字符在 Trie 树中查找对应的节点。如果找不到某个字符对应的节点,说明没有以该前缀开头的单词,返回 0。否则继续查找下一个字符。最后返回最后一个字符对应的节点的 pass 计数。
delete(String word): 从 Trie 树中删除一个单词。首先检查该单词是否存在于 Trie 树中,如果存在,则按照插入的顺序逆序遍历字符数组,逐个字符在 Trie 树中删除对应的节点。每删除一个节点,就将该节点的 pass 计数减一。如果某个节点的 pass 计数变为 0,说明该节点不再被任何单词使用,可以将其删除。最后将最后一个字符对应的节点的 end 计数减一。
public class test5 {public static class Node1{public int pass;public int end;public Node1[] nexts;public Node1(){pass = 0;end = 0;nexts = new Node1[26];}}public static  class Triel{private Node1 root;public Triel(){root = new Node1();}public void insert(String word){if(word == null){return;}char[] str = word.toCharArray();Node1 node = root;node.pass++;int path = 0;for (int i = 0; i < str.length; i++) {path = str[i] - 'a';if(node.nexts[path] == null){node.nexts[path] = new Node1();}node = node.nexts[path];node.pass++;}node.end++;}public int search(String word){if(word == null){return 0;}char[] chs = word.toCharArray();Node1 node =  root;int index  = 0;for (int i = 0; i < chs.length; i++) {index  = chs[i] - 'a';if(node.nexts[index] == null){return 0;}node = node.nexts[index];}return node.end;}public int prefixNumber(String pre){if(pre == null){return 0;}char[] chs = pre.toCharArray();Node1 node = root;int index = 0;for (int i = 0; i < chs.length; i++) {index = chs[i] - 'a';if (node.nexts[index] == null) {return 0;}node = node.nexts[index];}return node.pass;}public void delete(String word){if(search(word) != 0){char[] chs = word.toCharArray();Node1 node = root;node.pass--;int index = 0;for (int i = 0; i < chs.length; i++) {index = chs[i] - 'a';if(--node.nexts[index].pass == 0){node.nexts[index] =null;return;}node = node.nexts[index];}node.end--;}}}
}
http://www.lryc.cn/news/406489.html

相关文章:

  • CTF-pwn-虚拟化-vmmware 前置
  • thinkphp8结合layui2.9 图片上传验证
  • 农村污水处理难题:探索低成本高效解决方案
  • lightningcss介绍及使用
  • HTTP服务的应用
  • uni-app:踩坑路---scroll-view内使用fixed定位,无效的问题
  • MySQL4.索引及视图
  • MongoDB - 聚合阶段 $match、$sort、$limit
  • ModuleNotFoundError: No module named ‘scrapy.utils.reqser‘
  • vue3+ts+vite+electron+electron-packager打包成exe文件
  • 使用脚本搭建MySQL数据库基础环境
  • Parameter index out of range (2 > number of parameters, which is 1【已解决】
  • rk3588s 定制版 USB adb , USB2.0与USB3.0 区别,adb 由typeC 转换到USB3.0(第二部分)
  • Cookie与Session 实现登录操作
  • 通过IEC104转MQTT网关轻松接入阿里云平台
  • lua 游戏架构 之 游戏 AI (五)ai_autofight_find_way
  • vue3+openLayers点击标记事件
  • 深入分析 Android ContentProvider (三)
  • 养宠浮毛异味双困扰?性价比高的宠物空气净化器推荐
  • maven项目容器化运行之3-优雅的利用Jenkins和maven使用docker插件调用远程docker构建服务并在1Panel中运行
  • docker 打包orbbec
  • 无涯·问知财报解读,辅助更加明智的决策
  • 【Apache Doris】数据副本问题排查指南
  • 【HarmonyOS】关于鸿蒙消息推送的心得体会(二)
  • 零基础入门:创建一个简单的Python爬虫管理系统
  • 【Node.js基础04】node.js模块化
  • 数据库——单表查询
  • dsa加训
  • SpringBoot源码(1)ApplicationContext和BeanFactory
  • CANoe编程实例--TCP/IP通信