1.以Trie作为前缀树的结点,因为每个结点中其下层可以有26种选择,所有这里采用一个Trie类型的[]next来记录下层的所有选择,而不是像之前的结点用pre或next指针
2.为什么Trie结点中不用记录对应的字符信息?
因为对应的next数组中下标信息可以用于表示各个Tire结点对应的字符信息(char与int类型的转化)
3.Trie结点中额外使用一个标志is_End来表示当前字符是否为当前单词的最后一个字符

class Trie {//is_End来表示当前字符是否为当前前缀中的最后一个字符boolean is_End;//记录下层的所有选择Trie[] next;public Trie() {next = new Trie[26];}/** Inserts a word into the trie. */public void insert(String word) {Trie root = this;char[] temp = word.toCharArray();for(int i=0;i<temp.length;i++){//注意这里当next[]数组中下标上的元素为一个Trie结点时表示该下标对应字符是某个前缀的一部分if(root.next[temp[i]-'a']==null) root.next[temp[i]-'a']=new Trie();//构建层次关系root = root.next[temp[i]-'a'];}  // 单词插入完毕,当前结点即为此单词中的最后一个root.is_End = true;}/** Returns if the word is in the trie. */public boolean search(String word) {Trie root = this;char[] temp = word.toCharArray();for(int i=0;i<temp.length;i++){//注意这里当next[]数组中下标上的元素为一个Trie结点时表示该下标对应字符是某个前缀的一部分if(root.next[temp[i]-'a']==null) return false;//构建层次关系root = root.next[temp[i]-'a'];}//判断参数word是前缀的一部分,还是一个完整的单词return root.is_End;}/** Returns if there is any word in the trie that starts with the given prefix. */public boolean startsWith(String prefix) {Trie root = this;char[] temp = prefix.toCharArray();for(int i=0;i<temp.length;i++){//注意这里当next[]数组中下标上的元素为一个Trie结点时表示该下标对应字符是某个前缀的一部分if(root.next[temp[i]-'a']==null) return false;//构建层次关系root = root.next[temp[i]-'a'];}return true;}
}/*** Your Trie object will be instantiated and called as such:* Trie obj = new Trie();* obj.insert(word);* boolean param_2 = obj.search(word);* boolean param_3 = obj.startsWith(prefix);*/

T208 实现前缀树相关推荐

  1. Leetcode典型题解答和分析、归纳和汇总——T208(实现Trie前缀树)

    问题描述: 实现一个Trie前缀树,包含insert.search和startsWith这三个操作. 问题分析: 这类的题目与堆栈的最小元素查找类似,将所有功能进行集中处理. 首先我们需要明确一下tr ...

  2. 数据库索引数据结构总结——ART树就是前缀树

    数据库索引数据结构总结 from:https://zhewuzhou.github.io/2018/10/18/Database-Indexes/ 摘要 数据库索引是数据库中最重要的组成部分,而索引的 ...

  3. Trie(前缀树/字典树)及其应用

    from:https://www.cnblogs.com/justinh/p/7716421.html Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,P ...

  4. 有关完全二叉树求节点数和前缀树求字符串是否重复的两道算法题

    1.给定一棵完全二叉树的头节点head,求其中的节点个数 递归的方法,时间复杂度为O((logN)²) 首先递归出头节点的左子树的最大深度H,之后再递归头节点的右子树的深度是否等于H,若相等则表示,头 ...

  5. 字典数(前缀树)的实现

    [题目] 字典树又称为前缀树或者Trie树,是处理字符串常用的数据结构.假设组成所有单词的字符仅是'a'-'z',请实现字典树的结构,并包含以下四个主要的功能. void insert(String ...

  6. AC解 - Phone List(HDOJ#1671) 前缀树的一个应用

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=1671 Time Limit: 3000/1000 MS (Java/Others)    Memory L ...

  7. 算法练习day13——190401(前缀树、贪心策略拼接字符串使字典序最小)

    1.前缀树(Trie Tree) 1.1 字符串生成前缀树的过程 字母是填在路上的,不是填在节点上的. 首先是一个空的头结点: 加入"abc"到这棵树中: 头结点有到a的路吗?没有 ...

  8. Seq2Seq+前缀树:检索任务新范式(以KgCLUE为例)

    ©PaperWeekly 原创 · 作者 |苏剑林 单位 |追一科技 研究方向 |NLP.神经网络 两年前,在<万能的seq2seq:基于seq2seq的阅读理解问答>和<" ...

  9. Java 实现 Trie (前缀树)

    LeetCode:https://leetcode-cn.com/problems/implement-trie-prefix-tree/ 什么是前缀树 Trie(发音类似 "try&quo ...

最新文章

  1. 【Shell】fix 1032报错信息的脚本
  2. ncbi查找目的基因序列_基于PrimerBank和NCBI数据库的引物查找与设计
  3. PMP之工具与技术---假设条件和制约因素
  4. python显示数据长度_Python使用s来检测数据的长度
  5. 淘宝秒杀系统设计的几个注意点
  6. 消费者rebalance机制分析
  7. 云丰计算机,于云丰-中国科学院大学-UCAS
  8. micropython和python区别-MicroPython与Python速度对比
  9. Vue 组件库 (一)
  10. Sqlmap使用教程【超全】
  11. 企业微信推送消息(文本)
  12. 计算机网络安全技术简答题,计算机网络安全技术简答题
  13. 湖仓一体在金融科技行业的实践
  14. 为什么绝对收敛级数具有可交换性+为什么一般项级数不能使用比较判别法/等价判别法?
  15. java周志第二周_20165325 2017-2018-2 《Java程序设计》结对编程_第二周:四则运算
  16. usb网卡转接口被识别为光盘
  17. 美通企业日报 | 特步签约林书豪进军篮球领域;中兴和中国移动直播中国首个5G运动会...
  18. 知识图谱入门学习笔记(一)-概念
  19. 在mysql中创建和调试存储过程
  20. 健身之徒手健身:双人徒手健身,这才是男女搭配最好追求!

热门文章

  1. Expression 拼接组合表达式(附--封装代码)
  2. (七)深度学习实战 | MMDetection笔记(4)
  3. 互联网+行动意见:加快CDN建设、优化数据中心布局
  4. Linux pinctrl子系统分析之三 数据结构分析
  5. Catia 螺栓设计
  6. MySQL基础----动态SQL语句
  7. 2023四川安全员(B证)模拟
  8. git长时间未清理无法拉取代码( git Auto packing the repository in background for optimum performance)
  9. Linux多路复用之select方案
  10. 谈情说爱千万条,情绪稳定第一条