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

实现Trie(前缀树)

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

思路:核心代码并不困难,重要的是数据结构的构思。

相当于判断某条路径是否存在。

class Trie:def __init__(self):self.children = [None]*26self.isEnd = Falsedef insert(self, word: str) -> None:root = selffor ch in word:if root.children[ord(ch) - ord('a')] == None:root.children[ord(ch) - ord('a')] = Trie()root = root.children[ord(ch) - ord('a')]root.isEnd = Truedef search(self, word: str) -> bool:root = selffor ch in word:if root.children[ord(ch) - ord('a')] == None:return Falseroot = root.children[ord(ch) - ord('a')]return root.isEnddef startsWith(self, prefix: str) -> bool:root = selffor ch in prefix:if root.children[ord(ch) - ord('a')] == None:return Falseroot = root.children[ord(ch) - ord('a')]return True# 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)

http://www.dtcms.com/a/511773.html

相关文章:

  • 杰理SDK入门教程(六):自定义按键事件
  • gray = roi.clone();和gray = roi;的区别是什么?
  • STM32中MX_TIM2_Init函数和HAL_TIM_Base_MspInit函数区别
  • 【基于Selenium的智能滑块验证码破解技术详解】
  • AI体测设备服务商
  • 网站之间如何做视频交换惠州搜索引擎优化
  • 李宏毅机器学习笔记28
  • 【开题答辩实录分享】以《智慧社区信息化服务平台》为例进行答辩实录分享
  • 京东网站建设过程东莞建设网站的位置
  • SAP SD销售订单执行跟踪报表分享
  • 数据挖掘比赛baseline参考
  • [人工智能-大模型-19]:GitHub Copilot:程序员的 AI 编程副驾驶
  • 【JVM】低延迟垃圾收集器:Shenandoah收集器与ZGC收集器
  • 深圳网站建设deyondwordpress主题wake
  • Day44 | J.U.C中的LockSupport详解
  • 网络安全生态及学习路线
  • 深度学习-卷积神经网络基础
  • 广州教育网站设计公司在建工程项目查询
  • 【瀑布流大全】分析原理及实现方式(微信小程序和网页都适用)
  • wordpress网站的常规安全设置经验分享
  • 代码随想录Day53|110. 字符串接龙、105.有向图的完全联通、106. 岛屿的周长
  • 做婚恋网站这几年做哪个网站致富
  • 【案例实战】听歌学英语鸿蒙APP从零到上架全流程回顾
  • 基于频域的数字盲水印blind-watermark
  • 三、网站开发使用软件环境中小企业建站的方法
  • 开源 Linux 服务器与中间件(八)数据库--MariaDB
  • Mac OS 安装 VirtualBox
  • wordpress卡密系统源码主题站长工具查询seo
  • 宁波快速建站公司附近的装修公司地点
  • 物联网运维中的自适应网络拓扑重构技术