Trie树的插入,查前缀,查单词,删前缀和删单词。
这个Trie原先用C++就敲得很熟了,看了蓝桥杯的视频后学会把一个功能这样封装起来,以后用的时候就很爽可以直接调用了,所以就用Java写了;
public class Trie {
private final int SIZE = 26;
private final int HEAD = 'a';
private int cnt;
private int tail;
private Trie[] next = new Trie[SIZE];
void insert(String s) {
Trie now = this;
for (int i = 0; i < s.length(); i++) {
int id = s.charAt(i) - HEAD;
if (now.next[id] == null) {
now.next[id] = new Trie();
}
now = now.next[id];
now.cnt++;
}
now.tail++;
}
int queryPrefix(String s) {
Trie now = this;
for (int i = 0; i < s.length(); i++) {
int id = s.charAt(i) - HEAD;
if (now.next[id] == null) {
return 0;
}
now = now.next[id];
}
return now.cnt;
}
int queryWord(String s) {
Trie now = this;
for (int i = 0; i < s.length(); i++) {
int id = s.charAt(i) - HEAD;
if (now.next[id] == null) {
return 0;
}
now = now.next[id];
}
return now.tail;
}
void deletePrefix(String s) {
int sum = queryPrefix(s);
if (sum == 0) {
return;
}
Trie now = this;
for (int i = 0; i < s.length(); i++) {
int id = s.charAt(i) - HEAD;
now.next[id].cnt -= sum;
if (now.next[id].cnt == 0) {
now.next[id] = null;
return;
}
}
}
void deleteWord(String s) {
int sum = queryWord(s);
if (sum == 0) {
return;
}
Trie now = this;
for (int i = 0; i < s.length(); i++) {
int id = s.charAt(i) - HEAD;
now.next[id].cnt -= sum;
if (now.next[id].cnt == 0) {
now.next[id] = null;
return;
}
}
now.tail -= sum;
}
}
Trie树的插入,查前缀,查单词,删前缀和删单词。的更多相关文章
- trie树---(插入、删除、查询字符串)
HDU 5687 Problem Description 度熊手上有一本神奇的字典,你可以在它里面做如下三个操作: 1.insert : 往神奇字典中插入一个单词 2.delete: 在神奇字 ...
- 内存空间有限情况下的词频统计 Trie树 前缀树
数据结构与算法专题--第十二题 Trie树 https://mp.weixin.qq.com/s/nndr2AcECuUatXrxd3MgCg
- 双数组Trie树(DoubleArrayTrie)Java实现
http://www.hankcs.com/program/java/%E5%8F%8C%E6%95%B0%E7%BB%84trie%E6%A0%91doublearraytriejava%E5%AE ...
- 数据结构与算法—Trie树
Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...
- 字符串 --- KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组
涉及到字符串的问题,无外乎这样一些算法和数据结构:自动机 KMP算法 Extend-KMP 后缀树 后缀数组 trie树 trie图及其应用.当然这些都是比较高级的数据结构和算法,而这里面最常用和最熟 ...
- HDU 11488 Hyper Prefix Sets (字符串-Trie树)
H Hyper Prefix Sets Prefix goodness of a set string is length of longest common prefix*number of str ...
- java实现的Trie树数据结构
近期在学习的时候,常常看到使用Trie树数据结构来解决这个问题.比方" 有一个1G大小的一个文件.里面每一行是一个词.词的大小不超过16字节,内存大小限制是1M. 返回频数最高的100个词. ...
- 6天通吃树结构—— 第五天 Trie树
原文:6天通吃树结构-- 第五天 Trie树 很有段时间没写此系列了,今天我们来说Trie树,Trie树的名字有很多,比如字典树,前缀树等等. 一:概念 下面我们有and,as,at,cn,com这些 ...
- 【动画】看动画轻松理解「Trie树」
Trie树 Trie这个名字取自“retrieval”,检索,因为Trie可以只用一个前缀便可以在一部字典中找到想要的单词. 虽然发音与「Tree」一致,但为了将这种 字典树 与 普通二叉树 以示区别 ...
随机推荐
- jquery时钟
<script type="text/javascript"> function getDate(){ var mydate = new Date(); //时间对象 ...
- Python 三十个实践、建议和技巧
[导读]2020年,你又立了什么新的 Flag?新一年,我们先为大家准备 30 个非常优秀的 Python 实践技巧.希望这些诀窍能在实际工作中帮助大家,并且学到一些有用的知识. 1.使用 pytho ...
- 17。3.12---re模块--正则表达式操作指南
1----python re模块(Regular Expressioin正则表达式)提供了一个与perl等编程语言类似的正则匹配操作,他是一个处理python字符串的强有力的工具,有自己的语法和独立的 ...
- 集成通用Mapper
通用Mapper集成 1.引入jar包 <mapper.version>3.0.1</mapper.version><persistence-api.version> ...
- python-变量及其数据类型-01
目录 python-变量及其数据类型-01 1. 第一个python程序 2. 注释 3. 变量 4. 关键字 5. 变量的类型 python-变量及其数据类型-01 1. 第一个python程序 p ...
- c语言中常用的串运算
调用标准库函数 #include<string.h> 串比较,strcmp(char s1,char s2) 串复制,strcpy(char to,char from) 串连接,strca ...
- ZJNU 1223 - 素数距离——高级
因为最大可以达到int极限 明显直接筛选不可能完成 所以从其因子入手 因为任何不是素数的数都有除了1与其自身之外的因子 因此,我们筛出2^(31/2)≍46350之内的所有素数,以其作为因子再将题目给 ...
- SpringBoot项目启动之前操作,启动之后操作
1.在Bean对象初始化之前可以做的操作 @Component public class InitBean implements BeanDefinitionRegistryPostProcessor ...
- 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建)
黑马eesy_15 Vue:02.常用语法 黑马eesy_15 Vue:03.生命周期 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建) 黑马eesy_15 Vue:04.综合案例(前端 ...
- 2018 ACM-ICPC 宁夏 C.Caesar Cipher(模拟)
In cryptography, a Caesar cipher, also known as the shift cipher, is one of the most straightforward ...