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

054实现Trie(前缀树)

实现Trie(前缀树)

题目链接:https://leetcode.cn/problems/implement-trie-prefix-tree/description/?envType=study-plan-v2&envId=top-100-liked

我的解答:

分析:一开始想到用二维数组记录在每个长度上每个字母出现的次数,并用另一个二维数组记录在某个长度以某个字母结尾的单词的个数,但后面通过自己列举样例发现此方法行不通,例如:当插入“applea”、"abbbe"后,查询字符串"apple"是否在字符串中,此时前缀树既存在 “apple” 路径,又存在长度5上以"e"结尾的单词,按照我的设计此时应该返回true,但是"apple"并不存在于前缀树中,故此方法行不通。

看了官方题解后的解答:

private Trie[] children; private boolean isEnd;//标识是否为尾节点 public Trie() { children = new Trie[26]; } public void insert(String word) { Trie cur = this; for(int i=0; i<word.length(); i++){ char ch = word.charAt(i); int index = ch - 'a'; if(cur.children[index] == null){ cur.children[index] = new Trie(); } cur = cur.children[index]; } cur.isEnd = true; } public boolean search(String word) { Trie end = searchPrefix(word); return end != null && end.isEnd; } public boolean startsWith(String prefix) { return searchPrefix(prefix) != null; } private Trie searchPrefix(String prefix){ Trie cur = this; for(int i=0; i<prefix.length(); i++){ char ch = prefix.charAt(i); int index = ch - 'a'; if(cur.children[index] == null){ return null; } cur = cur.children[index]; } return cur; }

分析:

​ 1、代码的时间复杂度:初始化为 O(1),其余操作为 O(∣S∣),其中 ∣S∣ 是每次插入或查询的字符串的长度。

​ 2、代码的空间复杂度:O(∣T∣⋅Σ),其中 ∣T∣ 为所有插入字符串的长度之和,Σ 为字符集的大小,本题 Σ=26。

​ 3、解题思路:采用字典树,Trie类相当于字典树的节点,字典树的每个节点包含26个指向子节点的指针(因为题中注明了测试样例只包含小写字母)和一个变量isEnd(用来标识当前节点是否为某个字符串的结尾)。知道了字典树的结构,那么题中要求实现的三个方法就很容易实现了。

​ 4、我的解答思路偏离了题目意思,我想的是只用一个二维数组来维护所有,并没有把Trie类当作一个树的节点来看待,就会导致出现我列举的样例中的问题。但是题目其实已经告诉我们需要实现前缀树,那么自然而然地就应该想到Trie类是树的节点。

总结

  • 本题主要需要掌握字典树,在本题中,可以将字典树想象成一个26叉树,了解了字典树的结构后,方法实现上几乎没有难度。
http://www.jsqmd.com/news/849525/

相关文章:

  • 双人成行2026最新官方正版免费下载 520情侣必玩 一键转存 永久更新 (看到速转存 资源随时走丢)
  • 从‘测量平面’到‘器件平面’:深入浅出图解VNA去嵌背后的信号流与T参数矩阵
  • Jetson Nano项目实战:用udev规则永久绑定USB雷达/传感器,告别串口号漂移烦恼
  • 博德之门2026最新官方正版免费下载 一键转存 永久更新 (看到速转存 资源随时走丢)
  • Perplexity vs. Claude vs. Perplexity Pro订阅转化率对比分析(内部泄露数据首次公开)
  • 5个步骤告别Windows桌面混乱:NoFences免费分区管理工具完全指南
  • 2026年质量好的钢板桩打拔/钢板桩出租/钢板桩出租施工一体化精选厂家推荐 - 行业平台推荐
  • LVGL图表实战:lv_chart高效数据可视化与交互设计
  • 2026跨境物流突围:实在Agent跨境物流智能化管控方案与落地案例深度解析
  • 量子计算中IQP电路的连接性与噪声挑战
  • STM32 I2C驱动WM8988全记录:从设备地址、时序到完整初始化函数封装
  • 2026实战指南:极客老王教你实在Agent成品发货全流程自动化配置教程
  • 生化危机4:重制版+修改器2026最新官方正版免费下载 一键转存 永久更新 (看到速转存 资源随时走丢)
  • 缠论分析工具终极指南:如何在通达信中实现可视化技术分析
  • HarmonyOS实战解析:ServiceExtensionAbility的启动、连接与生命周期管理
  • 2026年质量好的长春钢模板/长春钢模板出租/钢模板买卖/钢模板出租品牌厂家推荐 - 品牌宣传支持者
  • 别再只用差速轮了!手把手教你为Navigation2仿真打造专属阿克曼底盘模型(附完整URDF/SDF文件)
  • Perplexity旅游信息可信度危机:权威信源交叉验证协议(ISO/IEC 25010合规版)首次公开
  • 惠州凌泰实业:优质机箱机柜生产厂家推荐,专业EMC屏蔽机箱、ATCA 标准机箱、CPCI标准机箱,1U/2U/3U/6U - 栗子测评
  • MCP39F501电能计量芯片:高精度单相计量方案与工程实践详解
  • UPS电源蓄电池定制厂家哪家好?2026太阳能蓄电池/光伏电池定制源头工厂推荐 - 栗子测评
  • SPM数据预处理保姆级避坑指南:从DICOM到平滑,手把手教你搞定fMRI分析
  • CANN/asc-devkit Mull矢量乘法API
  • Arm C1-Ultra核心AMU寄存器架构与调试技巧
  • RWKV vs. LLaMA2:在论文审稿任务上,我为什么第一版选了它(以及为什么后来放弃了)
  • 2026年评价高的长春钢模板买卖/钢模板买卖精选厂家推荐 - 品牌宣传支持者
  • 别再只调图表了!用Vue+Echarts做大屏,这5个布局与性能优化技巧才是关键
  • 为什么Google Sans Code是程序员的终极选择?5大核心优势详解
  • 2026年比较好的常州冷库回收/速冻冷库回收定制加工厂家推荐 - 行业平台推荐
  • 别再死记硬背了!用LabVIEW玩转模拟输出,从单点控制到连续波形生成的保姆级避坑指南