字典树(前缀树)-Java实现
字典树
字典树是一种树形结构,优点是利用字符串的公共前缀来节约存储空间。在这提供一个自己写的Java实现,非常简洁。
- 根节点没有字符路径。除根节点外,每一个节点都被一个字符路径找到。
- 从根节点到某一节点,将路径上经过的字符连接起来,为对应字符串。
- 每个节点向下所有的字符路径上的字符都不同
每个结点维持两个变量的记录:path表示字符路过这个结点的次数(即表示存在以当前结点为前缀的字符有多少个);end记录以当前结点为结束的字符有多少个。
public class Main {public static void main(String[] args) {Trie trie = new Trie();trie.add("a");trie.add("ab");trie.add("ac");trie.add("abc");trie.add("acb");trie.add("abcc");trie.add("aab");trie.add("abx");trie.add("abc");System.out.println(trie.get("abc"));System.out.println(trie.getPre("ab"));}
}
/*** path表示字符路过这个结点的次数(即表示存在以当前结点为前缀的字符有多少个);* end记录以当前结点为结束的字符有多少个。*/
class TrieNode {public int path;public int end;public TrieNode[] nexts;public TrieNode() {path = 0;end = 0;//只能存英文小写字母,如果是ASCII码可以生成256大小的数组//如果想存更多种类的字符可以改为map结构nexts = new TrieNode[26];}
}class Trie {private TrieNode root;Trie() {root = new TrieNode();}/*** 字典树的加入过程*/public void add(String word) {if (word == null) return;char[] chars = word.toCharArray();TrieNode node = root;int index = 0;for (char c : chars) {index = c - 'a';if (node.nexts[index] == null) {node.nexts[index] = new TrieNode();}node = node.nexts[index];node.path++;}node.end++;}/*** 字典树查询目标单词出现的次数*/public int get(String word) {if (word == null) return 0;char[] chars = word.toCharArray();TrieNode node = root;int index = 0;for (char c : chars) {index = c - 'a';if (node.nexts[index] == null) return 0;node = node.nexts[index];}return node.end;}/*** 字典树查询以目标前缀的单词有多少个*/public int getPre(String word) {if(word ==null) return 0;char[] chars = word.toCharArray();TrieNode node = root;int index = 0;for (char c : chars) {index = c - 'a';if(node.nexts[index]==null)return 0;node = node.nexts[index];}return node.path;}
}
转载于:https://www.cnblogs.com/keeya/p/9729153.html
字典树(前缀树)-Java实现相关推荐
- Trie(字典树/前缀树)
字典树/前缀树 Trie(发音类似 "try")或者说 前缀树(字典树) 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键.这一数据结构有相当多的应用情景,例如自动补完和 ...
- 字典数(前缀树)的实现
[题目] 字典树又称为前缀树或者Trie树,是处理字符串常用的数据结构.假设组成所有单词的字符仅是'a'-'z',请实现字典树的结构,并包含以下四个主要的功能. void insert(String ...
- 前缀树介绍,定义,图文详解分析——Java/Kotlin双版本代码
前缀树 前缀树,又称作字典树,用一个树状的数据结构储存字典中的所有单词. 列,一个包含can.cat.come.do.i.in.inn的前缀树如下图所示: 前缀树是一个多叉树,一个节点可能存在多个节点 ...
- 【前缀树】写一个敏感词过滤器
1.什么是敏感词过滤 这其实是一个很常见的功能,随处可见以至于你可能都没关注过,基本上在有评论的地方都会有它的身影. 举例来说,你打游戏和别人对喷的时候,是不是一些脏话发不出去哈哈,这些词汇会用*** ...
- python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)...
python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容: (1)利用python中的dict实现Trie: ( ...
- Trie(前缀树/字典树)及其应用
from:https://www.cnblogs.com/justinh/p/7716421.html Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,P ...
- leetcode 676. Implement Magic Dictionary | 676. 实现一个魔法字典(DFS+Trie 前缀树)
题目 https://leetcode.com/problems/implement-magic-dictionary/description/ 题解 题意理解 前缀树问题,大意是是让你在字典中找到是 ...
- java实现前缀树--过滤敏感词汇
一.前缀树简单介绍 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它 ...
- 字典树(Trie/前缀树)
目录 字典树的概念 字典树的逻辑 字典树的实现 易混点剖析 代码示例 字典树的概念 字典树(Trie)是一种空间换时间的数据结构,是一棵关于"字典"的树.主要用于统计.排序和保存大 ...
- 最优雅的数据结构之一——字典树Trie(Java)
什么是Trie? 又称单词查找树: 又叫前缀树(prefix tree): Trie树,是一种树形结构,是一种哈希树的变种. 作用: 用以较快速地进行单词或前缀查询: 用于快速检索.统计,排序和保存大 ...
最新文章
- 过渡期间的测试:外包软件的测试标准(译)
- HDU - 7008 水题(打表)
- 全志A33-BootLoader的两个阶段:boot0和second boot
- An error was encountered while running(Domain=LaunchSerivcesError, Code=0)
- php的内置函数strrpos_php strrpos 字符串查找函数内部源码实现
- HtmlUnit初探
- 使用windows live writer连接CSDN和博客园博客
- AWS AI网络研讨会 webinar - Case 分享
- java删除指定文件后重新建立文件系统_java file 操作之创建、删除文件及文件夹...
- [Android] Windows 7下 Android studio 安装 Genymotion 来调试 Android 遇到的问题总结
- java获取微信公众号二维码
- 价格行为交易策略:锤子十字线,Fakey,内部日烛线
- Localize Folders and Reports
- [原创]获取还原某音弹幕(web版)
- LTE - RA preamble的选择与其发送所需prach资源的选择
- 指定Jboss的JDK
- 日期相隔月数计算MONTHS_BETWEEN
- LOB variable no longer valid after subsequent fetch
- FANUC数控系统类有哪些最新发表的毕业论文呢?
- 我的GO+语言初体验-Go+入门安装避坑手册