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

字典树(Trie)详解 + Java 代码实现

目录一、字典树核心概念1. 结构特点2. 核心应用场景3. 时间复杂度二、字典树结构设计三、完整 Java 代码实现四、代码逐段讲解1. 节点类 TrieNode2. 插入方法 insert3. 查询单词 search4. 查询前缀 startsWith五、字典树优点 vs 缺点优点缺点六、扩展支持大小写 / 特殊字符扩展版 Java 代码总结字典树Trie也叫前缀树是一种多叉树专门用于高效存储和查找字符串集合的数据结构。它的核心优势利用字符串的公共前缀减少存储空间极大提升查询效率。一、字典树核心概念1. 结构特点根节点不存储字符其余每个节点存储一个字符。从根节点到某一个节点路径上的字符连接起来就是对应的字符串。拥有公共前缀的字符串会共享树的节点。节点标记用一个布尔值标记当前节点是否是字符串的结尾。2. 核心应用场景字符串前缀匹配搜索框自动补全单词检索字典、拼写检查IP 路由最长前缀匹配字符串去重3. 时间复杂度插入O(L)L 是字符串长度查询O(L)前缀查询O(L)远优于哈希表无哈希冲突和暴力匹配。二、字典树结构设计我们用节点类 主类实现TrieNode字典树节点children[]子节点数组26 个字母对应 a-zisEnd标记是否是单词结尾Trie字典树主类根节点插入方法insert查询完整单词方法search查询前缀方法startsWith三、完整 Java 代码实现/** * 字典树节点类 */ class TrieNode { // 子节点数组26个小写英文字母 TrieNode[] children; // 标记当前节点是否是一个单词的结尾 boolean isEnd; public TrieNode() { children new TrieNode[26]; isEnd false; } } /** * 字典树前缀树主类 */ public class Trie { // 根节点 private TrieNode root; public Trie() { // 初始化根节点 root new TrieNode(); } /** * 向字典树插入一个单词 * param word 待插入的单词 */ public void insert(String word) { // 从根节点开始遍历 TrieNode cur root; for (char c : word.toCharArray()) { // 计算字符对应的索引 0-25 int index c - a; // 如果子节点不存在创建新节点 if (cur.children[index] null) { cur.children[index] new TrieNode(); } // 移动到子节点 cur cur.children[index]; } // 单词遍历结束标记结尾 cur.isEnd true; } /** * 查询字典树中是否存在这个单词 * param word 待查询单词 * return 存在返回true否则false */ public boolean search(String word) { TrieNode cur root; for (char c : word.toCharArray()) { int index c - a; // 某个字符不存在直接返回false if (cur.children[index] null) { return false; } cur cur.children[index]; } // 必须走到单词结尾才算找到 return cur.isEnd; } /** * 查询字典树中是否有以该前缀开头的单词 * param prefix 前缀 * return 存在返回true */ public boolean startsWith(String prefix) { TrieNode cur root; for (char c : prefix.toCharArray()) { int index c - a; if (cur.children[index] null) { return false; } cur cur.children[index]; } // 只要能遍历完前缀就返回true不需要判断是否是单词结尾 return true; } // 测试 public static void main(String[] args) { Trie trie new Trie(); // 插入单词 trie.insert(apple); trie.insert(app); trie.insert(banana); // 查询单词 System.out.println(trie.search(apple)); // true System.out.println(trie.search(app)); // true System.out.println(trie.search(appl)); // false // 查询前缀 System.out.println(trie.startsWith(app)); // true System.out.println(trie.startsWith(ban)); // true System.out.println(trie.startsWith(xyz)); // false } }四、代码逐段讲解1. 节点类TrieNodechildren[26]存储 26 个小写字母的子节点。isEnd标记当前节点是不是单词最后一个字符。2. 插入方法insert从根节点出发。遍历单词的每一个字符。字符对应索引不存在 → 创建新节点。遍历完成后标记isEnd true。3. 查询单词search遍历字符节点不存在直接返回false。遍历结束后必须判断 isEnd确保是完整单词。4. 查询前缀startsWith只需要判断路径是否存在。不需要判断是否是单词结尾。五、字典树优点 vs 缺点优点前缀查询极快。天然去重相同前缀不重复存储。无哈希冲突问题。缺点空间消耗大如果字符串前缀重复少空间成本高。只适合字符串类型不适合数字范围查询。六、扩展支持大小写 / 特殊字符如果需要支持大小写字母、数字可以把数组换成HashMapCharacter, TrieNode。扩展版 Java 代码import java.util.HashMap; class TrieNodeMap { HashMapCharacter, TrieNodeMap children; boolean isEnd; public TrieNodeMap() { children new HashMap(); isEnd false; } } public class TrieMap { private TrieNodeMap root; public TrieMap() { root new TrieNodeMap(); } public void insert(String word) { TrieNodeMap cur root; for (char c : word.toCharArray()) { cur.children.putIfAbsent(c, new TrieNodeMap()); cur cur.children.get(c); } cur.isEnd true; } public boolean search(String word) { TrieNodeMap cur root; for (char c : word.toCharArray()) { if (!cur.children.containsKey(c)) return false; cur cur.children.get(c); } return cur.isEnd; } public boolean startsWith(String prefix) { TrieNodeMap cur root; for (char c : prefix.toCharArray()) { if (!cur.children.containsKey(c)) return false; cur cur.children.get(c); } return true; } }总结字典树 前缀树用于字符串快速查找 前缀匹配。核心结构节点数组 结束标记。三大方法insert、search、startsWith。时间复杂度O(L)空间换时间。标准场景搜索提示、字典、拼写检查、IP 匹配。

相关文章:

字典树(Trie)详解 + Java 代码实现

目录 一、字典树核心概念 1. 结构特点 2. 核心应用场景 3. 时间复杂度 二、字典树结构设计 三、完整 Java 代码实现 四、代码逐段讲解 1. 节点类 TrieNode 2. 插入方法 insert 3. 查询单词 search 4. 查询前缀 startsWith 五、字典树优点 vs 缺点 优点 缺点 六、…...

Hotkey Detective:3分钟快速定位Windows热键冲突的完整指南

Hotkey Detective:3分钟快速定位Windows热键冲突的完整指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是…...

在Python项目中管理多个Taotoken API Key与实现访问控制

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Python项目中管理多个Taotoken API Key与实现访问控制 在开发基于大模型的应用时,将生产环境与测试环境隔离&#xf…...

<项目代码>yolo缆绳识别<目标检测>

项目代码下载链接 YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN)&#xff0…...

如何快速掌握XELFViewer:Linux二进制文件分析的终极指南

如何快速掌握XELFViewer:Linux二进制文件分析的终极指南 【免费下载链接】XELFViewer ELF file viewer/editor for Windows, Linux and MacOS. 项目地址: https://gitcode.com/gh_mirrors/xe/XELFViewer 你是否曾面对复杂的Linux可执行文件感到无从下手&…...

告别手动字幕!3步用VideoSrt实现视频自动字幕生成

告别手动字幕!3步用VideoSrt实现视频自动字幕生成 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 还在为视频字幕制作而烦…...

m4s-converter:5分钟解锁B站缓存视频,打造个人专属媒体库

m4s-converter:5分钟解锁B站缓存视频,打造个人专属媒体库 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站缓…...

手把手教你为Ubuntu 22.04服务器安装Tesla V100s驱动与CUDA 12.2(保姆级避坑指南)

手把手教你为Ubuntu 22.04服务器安装Tesla V100s驱动与CUDA 12.2(保姆级避坑指南) 在AI模型训练和推理领域,Tesla V100s显卡凭借其强大的计算能力和高效的Tensor Core架构,成为许多企业和研究机构的首选。然而,为Ubunt…...

NVIDIA显卡终极色彩校准指南:novideo_srgb让广色域显示器回归真实色彩

NVIDIA显卡终极色彩校准指南:novideo_srgb让广色域显示器回归真实色彩 【免费下载链接】novideo_srgb Calibrate monitors to sRGB or other color spaces on NVIDIA GPUs, based on EDID data or ICC profiles 项目地址: https://gitcode.com/gh_mirrors/no/novi…...

2026年AI论文工具盘点:12款神器助你高效完成初稿生成、排版和降AI率

随着 AI 技术的持续突破,2026 年的论文写作工具市场已进入“智能化、精细化、合规化”的新阶段。从本科生的课程论文到研究生的学位论文,再到科研人员的期刊投稿,AI 工具正在为各类学术写作需求提供深度支持。无论是选题构思、文献检索&#…...

QKeyMapper:Windows平台开源按键映射解决方案完全指南

QKeyMapper:Windows平台开源按键映射解决方案完全指南 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper,Qt开发Win10&Win11可用,不修改注册表、不需重新启动系统,可立即生效和停止。支持游戏手柄映射到键鼠&#xff0c…...

DeepXDE终极指南:5分钟快速掌握科学机器学习神器

DeepXDE终极指南:5分钟快速掌握科学机器学习神器 【免费下载链接】deepxde A library for scientific machine learning and physics-informed learning 项目地址: https://gitcode.com/gh_mirrors/de/deepxde 还在为复杂的偏微分方程求解而头疼吗&#xff1…...

掌握Sunshine虚拟手柄配置:实现完美游戏控制体验

掌握Sunshine虚拟手柄配置:实现完美游戏控制体验 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine作为自托管的游戏串流服务器,其虚拟手柄配置功能是…...

重塑数字记忆:用WeChatExporter解锁微信聊天记录的永久保存方案

重塑数字记忆:用WeChatExporter解锁微信聊天记录的永久保存方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 在数字时代,微信聊天记录已成为我…...

高效解决幻兽帕鲁存档迁移难题:专业GUID替换工具实战指南

高效解决幻兽帕鲁存档迁移难题:专业GUID替换工具实战指南 【免费下载链接】palworld-host-save-fix Fixes the bug which forces a player to create a new character when they already have a save. Useful for migrating maps from co-op to dedicated servers a…...

DLSS Swapper:智能游戏DLSS版本管理工具,轻松提升游戏性能

DLSS Swapper:智能游戏DLSS版本管理工具,轻松提升游戏性能 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款免费开源的智能工具,专门为游戏玩家设计,能…...

Real-ESRGAN-GUI终极指南:免费AI图像增强工具,让模糊图片秒变高清

Real-ESRGAN-GUI终极指南:免费AI图像增强工具,让模糊图片秒变高清 【免费下载链接】Real-ESRGAN-GUI Lovely Real-ESRGAN / Real-CUGAN GUI Wrapper 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN-GUI 你是否曾经遇到过这样的情况&am…...

专业指南:yuzu模拟器完全配置与优化教程

专业指南:yuzu模拟器完全配置与优化教程 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 想在电脑上畅玩任天堂Switch游戏吗?yuzu模拟器为你提供了完美的解决方案。作为目前最受欢迎的开源Sw…...

HS2-HF Patch:为HoneySelect2打造的全能增强解决方案

HS2-HF Patch:为HoneySelect2打造的全能增强解决方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 如果你正在寻找一种简单高效的方式来提升Honey…...

RDP Wrapper:免费解锁Windows家庭版多用户远程桌面功能

RDP Wrapper:免费解锁Windows家庭版多用户远程桌面功能 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap RDP Wrapper Library是一个创新的开源项目,专为Windows家庭版和基础版用户提供完整的…...

puzzle(0312)找牛

目录 内固问题、最大内固问题 找牛 (10) (17) 内固问题、最大内固问题 参考内固、外固 寻找特定的内固集,即内固问题。 寻找最大内固数的内固集,即最大内固问题。 无向图的最大内固集(即…...

做一些真正有意义的研究,比如攻克某种疾病,或者探索LLM技术如果我拥有了花不完的钱,我会做什么?

如果我拥有了花不完的钱,我会做什么? 目录 如果我拥有了花不完的钱,我会做什么? 这才是对"人生意义"最诚实的回答 彻底消除所有的痛苦和匮乏 第二阶段:满足所有的好奇心和体验欲 第三阶段:创造一些真正有价值的东西 成为一个更好的人 写在最后 这才是对"…...

告别VNC客户端!用noVNC在浏览器里远程操控CentOS桌面,附Xshell/Xftp联动技巧

浏览器原生远程桌面方案:noVNC与终端工具链的高效整合指南每次连接远程服务器都要切换多个客户端的日子该结束了。想象一下这样的场景:清晨的咖啡馆里,你只需打开浏览器就能直接访问CentOS的图形界面,同时在一个标签页里用Xshell执…...

告别繁琐配置!OpenClaw 一键脚本,轻松搞定本地 AI 自动化

OpenClaw(小龙虾)Windows 一键部署保姆级教程 | 10 分钟养出你的数字员工(2026 最新版) 前言 2026 年热门的开源 AI 智能体 OpenClaw(昵称小龙虾),GitHub 星标超 28 万,凭借本地运…...

Fastboot Enhance:革新Android设备管理的智能图形化解决方案

Fastboot Enhance:革新Android设备管理的智能图形化解决方案 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance 你是否曾为Android设备的…...

OpenMemories-Tweak终极指南:5分钟解锁索尼相机所有隐藏功能

OpenMemories-Tweak终极指南:5分钟解锁索尼相机所有隐藏功能 【免费下载链接】OpenMemories-Tweak Unlock your Sony cameras settings 项目地址: https://gitcode.com/gh_mirrors/op/OpenMemories-Tweak 想要彻底解锁索尼相机的全部潜力吗?OpenM…...

终极指南:如何使用d2dx开源工具让经典《暗黑破坏神2》在现代PC上完美运行

终极指南:如何使用d2dx开源工具让经典《暗黑破坏神2》在现代PC上完美运行 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d…...

矢量图转换实战指南:5步实现PNG到SVG的无损升级方案

矢量图转换实战指南:5步实现PNG到SVG的无损升级方案 【免费下载链接】vectorizer Potrace based multi-colored raster to vector tracer. Inputs PNG/JPG returns SVG 项目地址: https://gitcode.com/gh_mirrors/ve/vectorizer 在数字设计领域,你…...

BiliBiliCCSubtitle架构解析:C++实现的B站CC字幕高效下载与转换技术方案

BiliBiliCCSubtitle架构解析:C实现的B站CC字幕高效下载与转换技术方案 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle BiliBiliCCSubtitle是一款基于C…...

Cursor Pro破解终极指南:5步实现永久免费使用的完整解决方案

Cursor Pro破解终极指南:5步实现永久免费使用的完整解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached yo…...