Implement Trie (Prefix Tree)实现字典树
[抄题]:
Implement a trie with insert, search, and startsWith methods.
Note:
You may assume that all inputs are consist of lowercase letters a-z.
[暴力解法]:
时间分析:
空间分析:
[思维问题]:
[一句话思路]:
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:


在node数组中选取一个node点来插入
[一刷]:
- 搜索是在node上进行的,结果也应该保存在一个node中,用来处理返回值
- insert的特判是index满了,此时无法插入;不是空,空时正常插入。find的特判是满了,此时就是返回自身,不是空,因为children[pos]为空就是普通情况。
- 寻找的index == word.length()时,直接返回单词本身。
[二刷]:
- children[pos]装的就是TrieNode,没有时 需要变成一个同类型的节点,稍微理解下
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
感觉难是因为java基础不扎实,多做几次吧。
- insert和find都是在中间的拐点处进行的 而非从起点开始,有一般性。没见过
- TrieNode中对children[pos]操作,Trie中对root进行操作
[复杂度]:Time complexity: O(n) Space complexity: O(<n)
[英文数据结构或算法,为什么不用别的数据结构或算法]:
- trie的时间复杂度和hashmap一样。优点在于空间复杂度,开头相同的字符串,不必重复存。
- 声明成员变量、引用在方法外部,自定义的类中要有方法实例化自己 新建对象,在方法内部,后期才能用this调用。这是java的基础知识,之前没有概念。
[关键模板化代码]:
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
211. Add and Search Word - Data structure design 就是写类,用数据结构辅助完成
[代码风格] :
class TrieNode {
//data structure
private TrieNode[] children;
public boolean hasWord;
//initialization
public TrieNode() {
children = new TrieNode[26];
hasWord = false;
}
//insert
public void insert(String word, int index) {
if (index == word.length()) {
this.hasWord = true;
return ;
}
int pos = word.charAt(index) - 'a';
if (children[pos] == null) {
children[pos] = new TrieNode();
}
children[pos].insert(word, index + 1);
}
//find
public TrieNode find(String word, int index) {
if (index == word.length()) {
return this;//this
}
int pos = word.charAt(index) - 'a';
if (children[pos] == null) {
return null;
}
return children[pos].find(word, index + 1);//to who
}
}
public class Trie {
private TrieNode root;
public Trie() {
root = new TrieNode();
}
/*
* @param word: a word
* @return: nothing
*/
public void insert(String word) {
root.insert(word, 0);
}
/*
* @param word: A string
* @return: if the word is in the trie.
*/
public boolean search(String word) {
TrieNode node = root.find(word, 0);//to who
return ((node != null) && (node.hasWord));
}
/*
* @param prefix: A string
* @return: if there is any word in the trie that starts with the given prefix.
*/
public boolean startsWith(String prefix) {
TrieNode node = root.find(prefix, 0);//to who
return (node != null);
}
}
Implement Trie (Prefix Tree)实现字典树的更多相关文章
- [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)
Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...
- [LeetCode] 208. Implement Trie (Prefix Tree) 实现字典树(前缀树)
Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...
- [LeetCode] 208. Implement Trie (Prefix Tree) ☆☆☆
Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...
- 字典树(查找树) leetcode 208. Implement Trie (Prefix Tree) 、211. Add and Search Word - Data structure design
字典树(查找树) 26个分支作用:检测字符串是否在这个字典里面插入.查找 字典树与哈希表的对比:时间复杂度:以字符来看:O(N).O(N) 以字符串来看:O(1).O(1)空间复杂度:字典树远远小于哈 ...
- leetcode面试准备:Implement Trie (Prefix Tree)
leetcode面试准备:Implement Trie (Prefix Tree) 1 题目 Implement a trie withinsert, search, and startsWith m ...
- LeetCode208 Implement Trie (Prefix Tree). LeetCode211 Add and Search Word - Data structure design
字典树(Trie树相关) 208. Implement Trie (Prefix Tree) Implement a trie with insert, search, and startsWith ...
- 【LeetCode】208. Implement Trie (Prefix Tree)
Implement Trie (Prefix Tree) Implement a trie with insert, search, and startsWith methods. Note:You ...
- 【刷题-LeetCode】208. Implement Trie (Prefix Tree)
Implement Trie (Prefix Tree) Implement a trie with insert, search, and startsWith methods. Example: ...
- 【leetcode】208. Implement Trie (Prefix Tree 字典树)
A trie (pronounced as "try") or prefix tree is a tree data structure used to efficiently s ...
随机推荐
- Eclipse中使用Maven,报错“$MAVEN_HOME”
1.今天在用eclipse时,执行maven命令,报错,如图"$MAVEN_HOME" 解决方案: 1.点击 windows---preferences,打开preferences ...
- 关于EPoll的个人理解
1.epoll 是I/o多路复用的一种解决方案,对比select的优点有: a.支持打开最大的文件描述符(可高达百万) b.效率并不随着描述符的增多而线性下降.select每次是轮询,所以描述符越多效 ...
- HDU 1535
http://acm.hdu.edu.cn/showproblem.php?pid=1535 水题 单向图,从1到P所有点,再从所有点回到1,问最小花费 先求一遍1的最短路,然后反向建图,再求一遍1的 ...
- windows10企业版2016长期服务版激活 -------转
原地址: https://blog.csdn.net/chaoyu168/article/details/79241506 win10 2016 长期服务版的ISO文件中本身就带有KMS激活KEY,不 ...
- 一行能装逼的JavaScript代码的延伸
前段就是坑,入坑水真深. 先看看一个黑科技, 纳尼,这是什么东西. (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+ ...
- 常见OJ评判结果对照表
Waiting:你的程序刚刚提交,正在等待OJ评测你的程序. Compiling:OJ正在编译你的程序. Accepted:OK!你的程序是正确的 ^_^. Wrong Answer:你的 ...
- yarn workspaces基本试用
初始化项目 yarn init -y 添加workspaces 支持 修改package.json { "name": "second", "vers ...
- 使用jquery触发a标签跳转
错误示例 <a href="http://www.baidu.com" target="_blank">baidu</a> // 直接是 ...
- 使用ndk-stack来查找崩溃
logcat报错 Fatal signal 6 (SIGABRT) at 0x000025c9 (code=-6), thread 9703 (Thread-1277) 都是一些寄存器以及函数地址,真 ...
- Spring Cloud 入门 之 Eureka 篇(一)
原文地址:Spring Cloud 入门 之 Eureka 篇(一) 博客地址:http://www.extlight.com 一.前言 Spring Cloud 是一系列框架的有序集合.它利用 Sp ...