当前位置: 首页 > wzjs >正文

腾讯做网站模版ppt

腾讯做网站,模版ppt,国际进出口贸易网站,微能力者恶魔网站谁做的LeetCode 热题 100 | 208. 实现 Trie (前缀树) 大家好!今天我们来解决一道经典的算法题——实现 Trie (前缀树)。Trie(发音类似 “try”)是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构在自动补全和拼…

LeetCode 热题 100 | 208. 实现 Trie (前缀树)

大家好!今天我们来解决一道经典的算法题——实现 Trie (前缀树)。Trie(发音类似 “try”)是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构在自动补全和拼写检查等场景中有广泛的应用。下面我将详细讲解解题思路,并附上Python代码实现。


一、问题描述

请你实现 Trie 类,支持以下操作:

  1. Trie():初始化前缀树对象。
  2. void insert(String word):向前缀树中插入字符串 word
  3. boolean search(String word):如果字符串 word 在前缀树中,返回 true;否则,返回 false
  4. 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

二、解题思路

核心思想

Trie 树是一种多叉树,每个节点表示一个字符。每个节点可以有多个子节点,每个子节点表示一个不同的字符。Trie 树的每个节点还包含一个标志位,用于标记该节点是否是一个单词的结尾。

实现步骤

  1. 定义 Trie 节点

    • 每个节点包含一个字典 children,用于存储子节点。
    • 每个节点包含一个布尔值 is_end,用于标记该节点是否是一个单词的结尾。
  2. 插入操作

    • 从根节点开始,逐个字符插入。
    • 如果当前字符不存在于当前节点的子节点中,则创建一个新的子节点。
    • 移动到下一个子节点,直到插入完所有字符。
    • 在最后一个字符的节点上标记 is_endTrue
  3. 搜索操作

    • 从根节点开始,逐个字符查找。
    • 如果当前字符不存在于当前节点的子节点中,返回 False
    • 移动到下一个子节点,直到查找完所有字符。
    • 检查最后一个字符的节点的 is_end 标志,如果为 True,返回 True;否则,返回 False
  4. 前缀查找操作

    • 从根节点开始,逐个字符查找。
    • 如果当前字符不存在于当前节点的子节点中,返回 False
    • 移动到下一个子节点,直到查找完所有字符。
    • 如果成功查找完所有字符,返回 True

代码实现

class TrieNode:def __init__(self):self.children = {}  # 存储子节点self.is_end = False  # 标记是否是一个单词的结尾class Trie:def __init__(self):self.root = TrieNode()  # 初始化根节点def insert(self, word: str) -> None:node = self.rootfor char in word:if char not in node.children:node.children[char] = TrieNode()node = node.children[char]node.is_end = True  # 标记单词结尾def search(self, word: str) -> bool:node = self.rootfor char in word:if char not in node.children:return Falsenode = node.children[char]return node.is_end  # 检查是否是单词结尾def startsWith(self, prefix: str) -> bool:node = self.rootfor char in prefix:if char not in node.children:return Falsenode = node.children[char]return True  # 前缀查找成功

代码解析

  1. 定义 Trie 节点

    • TrieNode 类包含一个字典 children 和一个布尔值 is_end
  2. 插入操作

    • 从根节点开始,逐个字符插入。
    • 如果当前字符不存在于当前节点的子节点中,则创建一个新的子节点。
    • 移动到下一个子节点,直到插入完所有字符。
    • 在最后一个字符的节点上标记 is_endTrue
  3. 搜索操作

    • 从根节点开始,逐个字符查找。
    • 如果当前字符不存在于当前节点的子节点中,返回 False
    • 移动到下一个子节点,直到查找完所有字符。
    • 检查最后一个字符的节点的 is_end 标志,如果为 True,返回 True;否则,返回 False
  4. 前缀查找操作

    • 从根节点开始,逐个字符查找。
    • 如果当前字符不存在于当前节点的子节点中,返回 False
    • 移动到下一个子节点,直到查找完所有字符。
    • 如果成功查找完所有字符,返回 True

复杂度分析

  • 时间复杂度

    • insert:O(m),其中 m 是单词的长度。
    • search:O(m),其中 m 是单词的长度。
    • startsWith:O(m),其中 m 是前缀的长度。
  • 空间复杂度

    • O(n * m),其中 n 是插入的单词数量,m 是单词的平均长度。

示例运行

示例1
# 创建 Trie 对象
trie = Trie()
# 执行操作
trie.insert("apple")
print(trie.search("apple"))   # 返回 True
print(trie.search("app"))     # 返回 False
print(trie.startsWith("app")) # 返回 True
trie.insert("app")
print(trie.search("app"))     # 返回 True

输出

True
False
True
True

总结

通过实现 Trie 树,我们可以在高效地存储和检索字符串数据集中的键。Trie 树在自动补全和拼写检查等场景中有广泛的应用。希望这篇题解对大家有所帮助,如果有任何问题,欢迎在评论区留言讨论!

关注我,获取更多算法题解和编程技巧!


文章转载自:

http://KtI8k22l.qrdhz.cn
http://ERqnyjpr.qrdhz.cn
http://HzRDd7Pn.qrdhz.cn
http://BJRw2d2j.qrdhz.cn
http://ksEOSqjh.qrdhz.cn
http://zIRdCD26.qrdhz.cn
http://2SW2ON3o.qrdhz.cn
http://ixu4lnXG.qrdhz.cn
http://Qal7pURQ.qrdhz.cn
http://fU9uvRDX.qrdhz.cn
http://NISD5OiV.qrdhz.cn
http://iyEtKJpV.qrdhz.cn
http://wwEfIC69.qrdhz.cn
http://CUB9HThr.qrdhz.cn
http://OhhY1wDm.qrdhz.cn
http://sMzybTnN.qrdhz.cn
http://btX8BNGM.qrdhz.cn
http://qozGFSqs.qrdhz.cn
http://w57M4s2f.qrdhz.cn
http://Ith8rQVI.qrdhz.cn
http://lD5drfZ8.qrdhz.cn
http://sVvQZqqf.qrdhz.cn
http://YBkyBVDn.qrdhz.cn
http://yVvva7A4.qrdhz.cn
http://5IEz3CyX.qrdhz.cn
http://gkZLmncb.qrdhz.cn
http://IzbHxcow.qrdhz.cn
http://JKVvuPuS.qrdhz.cn
http://1xso1I4E.qrdhz.cn
http://OYcRzfY2.qrdhz.cn
http://www.dtcms.com/wzjs/621666.html

相关文章:

  • 陕西省城乡住房建设部网站网站建设的需求要素
  • 做网站原创要多少钱微商代理0元0投入
  • 那个网站做国外售货百度提交网站地图
  • 网站建设前 需要准备的旅游网站的功能结构图
  • 外币投资理财网站开发微信公众号前端开发教程
  • 赤峰酒店网站建设哪家便宜成都优化网站分析
  • 青岛城市建设局网站企业为什么做网站 图片
  • 网站关键词抓取设计师网站崩了
  • 网站搜索功能如何实现建设工程安全监督备案网站
  • 四川省城乡建设部网站首页wordpress 8.0怎么登录
  • 四川省建设执业注册中心网站ip备案信息查询
  • 怎么做网站推九州娱乐官方网站怎么做代理
  • 广西住建网官网重庆网站seo费用
  • 佛山做外贸网站信息企业网站优化托管
  • 商业网站建设与维护fm网站开发
  • 农村网站建设补助广州网站制作公司 番禺
  • 西宁网站建设兼职怎么生成链接
  • 成化区建设局网站平面设计有几个软件
  • 哪个免费自助建站系统最好用山东已经宣布封城的城市2022年
  • 扬州市建设局网站 竣工备案台州网站注册 公司
  • 外贸 企业网站 建设郑州市政务公开
  • 电子商务网站开发软件股票查询网站模板 wordpress
  • 51网站哪里去了建e网室内设计网图片
  • 目前热门的网站建设语言无忧网站优化
  • 做评测系统网站首先要干嘛如何对自己建设的网站进行推广
  • 网站建站和项目部署一样吗微信公众号怎么制作网页
  • 内力网站建设买域名不建网站
  • 中国第四冶金建设有限公司官方网站我要恢复百度
  • 做网站设计哪里有汕头seo代理
  • 怎么做百度自己的网站空间wordpress 随机名言插件