当前位置:网站首页>208. 实现 Trie (前缀树)
208. 实现 Trie (前缀树)
2022-07-01 03:23:00 【Sun_Sky_Sea】
208. 实现 Trie (前缀树)
原始题目链接:https://leetcode.cn/problems/implement-trie-prefix-tree/
Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。
请你实现 Trie 类:
Trie() 初始化前缀树对象。
void insert(String word) 向前缀树中插入字符串 word 。
boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。
boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false 。
示例:
输入
[“Trie”, “insert”, “search”, “search”, “startsWith”, “insert”, “search”]
[[], [“apple”], [“apple”], [“app”], [“app”], [“app”], [“app”]]
输出
[null, null, true, false, true, null, true]
解释
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
提示:
1 <= word.length, prefix.length <= 2000
word 和 prefix 仅由小写英文字母组成
insert、search 和 startsWith 调用次数 总计 不超过 3 * 104 次
解题思路:
构建树的节点,使用字典存储子树结构,{word_char: 子树},标识从根节点到当前节点的路径,构成了一个关键词。
代码实现:
class Trie:
def __init__(self):
self.root = Node()
def insert(self, word: str) -> None:
cur_node = self.root
for c in word:
cur_node = cur_node.children[c]
cur_node.flag = True
def search(self, word: str) -> bool:
cur_node = self.root
for c in word:
cur_node = cur_node.children.get(c)
if cur_node == None:
return False
return cur_node.flag
def startsWith(self, prefix: str) -> bool:
cur_node = self.root
for c in prefix:
cur_node = cur_node.children.get(c)
if cur_node == None:
return False
return True
# 定义一个节点
class Node(object):
def __init__(self):
# 使用字典存储子树结构,{word_char: 子树}
self.children = collections.defaultdict(Node)
# 标识从根节点到当前节点的路径,构成了一个关键词
self.flag = False
# Your Trie object will be instantiated and called as such:
# obj = Trie()
# obj.insert(word)
# param_2 = obj.search(word)
# param_3 = obj.startsWith(prefix)
边栏推荐
- E15 solution for cx5120 controlling Huichuan is620n servo error
- 监听器 Listener
- Edlines: a real time line segment detector with a false detection control
- idea插件备份表
- multiple linear regression
- 衡量两个向量相似度的方法:余弦相似度、pytorch 求余弦相似度:torch.nn.CosineSimilarity(dim=1, eps=1e-08)
- 后台系统页面左边菜单按钮和右边内容的处理,后台系统页面出现双滚动
- Design of serial port receiving data scheme
- [reach out to Party welfare] developer reload system sequence
- Idea plug-in backup table
猜你喜欢

4、【WebGIS实战】软件操作篇——数据导入及处理

FCN full Convolution Network Understanding and Code Implementation (from pytorch Official Implementation)

pytorch中的双线性插值上采样(Bilinear Upsampling)、F.upsample_bilinear

Learning notes for introduction to C language multithreaded programming

Pytorch training deep learning network settings CUDA specified GPU visible

JUC learning

排序链表(归并排序)

RSN:Learning to Exploit Long-term Relational Dependencies in Knowledge Graphs
![Online public network security case nanny level tutorial [reaching out for Party welfare]](/img/66/d9c848a7888e547b7cb28d84aabc24.png)
Online public network security case nanny level tutorial [reaching out for Party welfare]

IPv4和IPv6、局域网和广域网、网关、公网IP和私有IP、IP地址、子网掩码、网段、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?
随机推荐
Ctfshow blasting WP
FCN全卷積網絡理解及代碼實現(來自pytorch官方實現)
ASGNet论文和代码解读2
Leetcode 1482 guess, how about this question?
md5sum操作
Design of serial port receiving data scheme
串口接收数据方案设计
后台系统页面左边菜单按钮和右边内容的处理,后台系统页面出现双滚动
[深度学习]激活函数(Sigmoid等)、前向传播、反向传播和梯度优化;optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理
Appium自动化测试基础--补充:C/S架构和B/S架构说明
Bilinear upsampling and f.upsample in pytorch_ bilinear
10、Scanner. Next() cannot read spaces /indexof -1
ECMAScript 6.0
Gorilla/mux framework (RK boot): RPC error code design
torch.histc
The difference between MFC for static libraries and MFC for shared libraries
谷粒学院微信扫码登录过程记录以及bug解决
Use of comment keyword in database
Ridge regression and lasso regression
How to use hybrid format to output ISO files? isohybrid:command not found