T208 实现前缀树
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 实现前缀树相关推荐
- Leetcode典型题解答和分析、归纳和汇总——T208(实现Trie前缀树)
问题描述: 实现一个Trie前缀树,包含insert.search和startsWith这三个操作. 问题分析: 这类的题目与堆栈的最小元素查找类似,将所有功能进行集中处理. 首先我们需要明确一下tr ...
- 数据库索引数据结构总结——ART树就是前缀树
数据库索引数据结构总结 from:https://zhewuzhou.github.io/2018/10/18/Database-Indexes/ 摘要 数据库索引是数据库中最重要的组成部分,而索引的 ...
- Trie(前缀树/字典树)及其应用
from:https://www.cnblogs.com/justinh/p/7716421.html Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,P ...
- 有关完全二叉树求节点数和前缀树求字符串是否重复的两道算法题
1.给定一棵完全二叉树的头节点head,求其中的节点个数 递归的方法,时间复杂度为O((logN)²) 首先递归出头节点的左子树的最大深度H,之后再递归头节点的右子树的深度是否等于H,若相等则表示,头 ...
- 字典数(前缀树)的实现
[题目] 字典树又称为前缀树或者Trie树,是处理字符串常用的数据结构.假设组成所有单词的字符仅是'a'-'z',请实现字典树的结构,并包含以下四个主要的功能. void insert(String ...
- AC解 - Phone List(HDOJ#1671) 前缀树的一个应用
原题:http://acm.hdu.edu.cn/showproblem.php?pid=1671 Time Limit: 3000/1000 MS (Java/Others) Memory L ...
- 算法练习day13——190401(前缀树、贪心策略拼接字符串使字典序最小)
1.前缀树(Trie Tree) 1.1 字符串生成前缀树的过程 字母是填在路上的,不是填在节点上的. 首先是一个空的头结点: 加入"abc"到这棵树中: 头结点有到a的路吗?没有 ...
- Seq2Seq+前缀树:检索任务新范式(以KgCLUE为例)
©PaperWeekly 原创 · 作者 |苏剑林 单位 |追一科技 研究方向 |NLP.神经网络 两年前,在<万能的seq2seq:基于seq2seq的阅读理解问答>和<" ...
- Java 实现 Trie (前缀树)
LeetCode:https://leetcode-cn.com/problems/implement-trie-prefix-tree/ 什么是前缀树 Trie(发音类似 "try&quo ...
最新文章
- 【Shell】fix 1032报错信息的脚本
- ncbi查找目的基因序列_基于PrimerBank和NCBI数据库的引物查找与设计
- PMP之工具与技术---假设条件和制约因素
- python显示数据长度_Python使用s来检测数据的长度
- 淘宝秒杀系统设计的几个注意点
- 消费者rebalance机制分析
- 云丰计算机,于云丰-中国科学院大学-UCAS
- micropython和python区别-MicroPython与Python速度对比
- Vue 组件库 (一)
- Sqlmap使用教程【超全】
- 企业微信推送消息(文本)
- 计算机网络安全技术简答题,计算机网络安全技术简答题
- 湖仓一体在金融科技行业的实践
- 为什么绝对收敛级数具有可交换性+为什么一般项级数不能使用比较判别法/等价判别法?
- java周志第二周_20165325 2017-2018-2 《Java程序设计》结对编程_第二周:四则运算
- usb网卡转接口被识别为光盘
- 美通企业日报 | 特步签约林书豪进军篮球领域;中兴和中国移动直播中国首个5G运动会...
- 知识图谱入门学习笔记(一)-概念
- 在mysql中创建和调试存储过程
- 健身之徒手健身:双人徒手健身,这才是男女搭配最好追求!