实现 Trie (前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。
示例:
Trie trie = new Trie();
trie.insert("apple");
trie.search("apple"); // 返回 true
trie.search("app"); // 返回 false
trie.startsWith("app"); // 返回 true
trie.insert("app");
trie.search("app"); // 返回 true
说明:
你可以假设所有的输入都是由小写字母 a-z 构成的。
保证所有输入均为非空字符串。
const int MAXN=;//英文字符个数
class Trie
{
private:
Trie *next[MAXN];
bool isEnd=false;
public:
/** Initialize your data structure here. */
Trie()
{
isEnd=false;
memset(next,,sizeof(next));
}
/** Inserts a word into the trie. */
void insert(string word)
{
if(word.empty())
return ; Trie *cur=this;//cur初始化当前节点
for(auto c:word)
{
if(cur->next[c-'a']==nullptr)//看当前结点在前缀树中是否存在
cur->next[c-'a']=new Trie(); cur=cur->next[c-'a'];//每个结点有个next和isEnd
}
cur->isEnd=true;//当前节点已经是一个完整的字符串
return ;
}
/** Returns if the word is in the trie. */
bool search(string word)
{
if(word.empty())
return false; Trie *cur=this;
for(auto c:word)
{
if(cur)
cur=cur->next[c-'a'];//若c在Trie中不存在,则cur->next[c-'a']为nullptr
}
return cur&&cur->isEnd?true:false;//cur不为空且cur指向的结点为一个完整的字符串,则为成功找到
}
/** Returns if there is any word in the trie that starts with the given prefix. */
bool startsWith(string prefix)
{
if(prefix.empty())
return false; auto cur=this;
for(auto c:prefix)
{
if(cur)
cur=cur->next[c-'a'];
}
return cur?true:false;
}
};
实现 Trie (前缀树)的更多相关文章
- [Swift]LeetCode208. 实现 Trie (前缀树) | Implement Trie (Prefix Tree)
Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...
- python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)
python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容:(1)利用python中的dict实现Trie:(2) ...
- leetcode 208. 实现 Trie (前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie(); trie.insert(" ...
- 第15个算法-实现 Trie (前缀树)(LeetCode)
解法代码来源 :https://blog.csdn.net/whdAlive/article/details/81084793 算法来源:力扣(LeetCode)链接:https://leetcode ...
- 力扣208——实现 Trie (前缀树)
这道题主要是构造前缀树节点的数据结构,帮助解答问题. 原题 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = ...
- Java实现 LeetCode 208 实现 Trie (前缀树)
208. 实现 Trie (前缀树) 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie() ...
- 数据结构—— Trie (前缀树)
实现一个 Trie (前缀树),包含 插入, 查询, 和 查询前缀这三个操作. Trie trie = new Trie(); trie.insert("apple"); trie ...
- 力扣 - 208. 实现Trie(前缀树)
目录 题目 思路 代码 复杂度分析 题目 208. 实现 Trie (前缀树) 思路 在我们生活中很多地方都用到了前缀树:自动补全,模糊匹配,九宫格打字预测等等... 虽然说用哈希表也可以实现:是否出 ...
- [leetcode] 208. 实现 Trie (前缀树)(Java)
208. 实现 Trie (前缀树) 实现Trie树,网上教程一大堆,没啥可说的 public class Trie { private class Node { private int dumpli ...
随机推荐
- C++ 模板特化、偏特化测试程序
#include <iostream> // 偏特化的模板不会自己添加构造函数 ctor 和 析构函数 dtor #if 1 // P1 template <typename T1, ...
- Http响应乱码
Http响应乱码 方案1 response.setHeader("Content-Type", "application/json"); response.se ...
- 记 2019蓝桥杯校内预选赛(JAVA组) 赛后总结
引言 好像博客好久没更新了 哈哈哈哈哈 趁现在有空更新一波 不知道还有没有人看 确实该记录一下每天做了什么了 不然感觉有些浑浑噩噩了 比赛介绍 全称: 蓝桥杯全国软件和信息技术专业人才大赛 蓝桥杯 实 ...
- unique_ptr的实现原理
在C++11中有两个智能指针类型来管理动态对象,share_ptr允许多个指针指向同一个对象,unique_ptr则“独占”所指对象. 我们知道指针或引用在离开作用域时是不会进行析构的,但是类在离开作 ...
- CF1195E OpenStreetMap
题目链接 题意 有一个\(n\times m\)的矩阵,询问其中所有大小为\(a \times b\)的子矩阵的最小值之和. \(1\le n,m \le 3000\) 思路 因为是子矩阵的大小是固定 ...
- 数据仓库006 - MySQL 5.6.x - Linux最佳生产环境离线部署
一.离线安装包 文件准备 这里以mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz为例,记一次MySQL 5.6.x 的生产环境离线部署过程.使用SecureCRT连接 ...
- Unity开发实战探讨-资源的加载释放最佳策略简要心得
Unity开发实战探讨-资源的加载释放最佳策略简要心得 看过我另外一篇关于Unity资源释放随笔<Unity开发实战探讨-资源的加载释放最佳策略>如果觉得略微复杂,那么下面是一些比较简要的 ...
- 记录战斗记录你,详解妖尾战斗录像系统[Unity]
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- centos 启动一个tcp服务程序
需要先yum安装: yum install nc 启动服务: nc -l 80
- not in和not exists区别
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引: 而not extsts 的子查询依然能用到表上的索引. 所以无论那个表大,用not exists都比not in要快. 也就是 ...