当前位置:网站首页>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)
边栏推荐
- [deep learning] activation function (sigmoid, etc.), forward propagation, back propagation and gradient optimization; optimizer. zero_ grad(), loss. backward(), optimizer. Function and principle of st
- 5、【WebGIS实战】软件操作篇——服务发布及权限管理
- Appium自动化测试基础 — APPium基本原理
- Error: plug ins declaring extensions or extension points must set the singleton directive to true
- Addition without addition, subtraction, multiplication and division
- Feature pyramid networks for object detection
- Download and installation configuration of cygwin
- ECMAScript 6.0
- [深度学习]激活函数(Sigmoid等)、前向传播、反向传播和梯度优化;optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理
- Detailed list of errors related to twincat3 ads of Beifu
猜你喜欢

Use of comment keyword in database

详解Spark运行模式(local+standalone+yarn)

Ridge regression and lasso regression

还在浪费脑细胞自学吗,这份面试笔记绝对是C站天花板

Cygwin的下载和安装配置

线程数据共享和安全 -ThreadLocal

数据库中COMMENT关键字的使用
![4. [WebGIS practice] software operation chapter - data import and processing](/img/5a/b86e0538660f27c809cf429053a06c.png)
4. [WebGIS practice] software operation chapter - data import and processing

Appium自动化测试基础--补充:C/S架构和B/S架构说明

Edge drawing: a combined real-time edge and segment detector
随机推荐
pytorch训练深度学习网络设置cuda指定的GPU可见
Finally in promise
Complete knapsack problem
Edge drawing: a combined real-time edge and segment detector
torch.histc
BluePrism注册下载并安装-RPA第一章
Leetcode 31 next spread, leetcode 64 minimum path sum, leetcode 62 different paths, leetcode 78 subset, leetcode 33 search rotation sort array (modify dichotomy)
Golang multi graph generation gif
[深度学习]激活函数(Sigmoid等)、前向传播、反向传播和梯度优化;optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理
idea插件备份表
TEC: Knowledge Graph Embedding with Triple Context
[nine day training] content III of the problem solution of leetcode question brushing Report
文件上传下载
二叉树神级遍历:Morris遍历
MFC窗口滚动条用法
multiple linear regression
Processing of menu buttons on the left and contents on the right of the background system page, and double scrolling appears on the background system page
Server rendering technology JSP
Thread data sharing and security -threadlocal
ES6解构语法详解