LeeCode每日一题:208. 实现 Trie (前缀树)

news/2024/11/19 22:33:07/

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 仅由小写英文字母组成
  • insertsearch 和 startsWith 调用次数 总计 不超过 3 * 104 次

解题思路:最基础的线段树题目。长时间不刷题都快忘干净了,参考了官方题解,但因为使用了递归导致内存和运行时间偏高。 还有就是用Java写数据结构好别扭(奈何C++都快忘干净了)。

class Trie {private final Trie[] children ;private boolean isEnd = false;public Trie() {children = new Trie[26];}public void insert(String word) {if(word.length() == 0){isEnd = true;return;}char ch = word.charAt(0);int index = ch - 'a';if(children[index] == null){children[index] = new Trie();}children[index].insert(word.substring(1));}public boolean search(String word) {Trie trie = searchPrefix(word);return trie != null && trie.isEnd;}public boolean startsWith(String prefix) {return searchPrefix(prefix) != null;}public Trie searchPrefix(String prefix){if(prefix.length() == 0){return this;}int index = prefix.charAt(0) - 'a';return children[index] == null ? null : children[index].searchPrefix(prefix.substring(1));}
}


http://www.ppmy.cn/news/1198075.html

相关文章

京东云主机租用优惠价格表和轻量云主机

京东云主机租用优惠价格表轻量云主机2C2G3M配置66元一年、2C2G4M带宽99元1年&#xff0c;3年326元&#xff1b;云主机2核4G5M带宽598元一年&#xff0c;买三年1499元&#xff1b;轻量云主机低至5.5元一个月&#xff0c;阿腾云atengyun.com分享领取13180元京东云服务器专用优惠代…

Unity Profiler 详细解析(二)

Profiler的主要参数详解 1. Memory Profiler Uesd Total : 当前帧的Unity内存&#xff0c;Mono内存&#xff0c;GfxDriver内存&#xff0c;Profiler内存以及额外内存的总和。 Reserved Total&#xff1a; 系统在当前帧申请的总体物理内存 Total System Memory Usage&#xff1…

Java的拆箱和装箱

Java拆箱&#xff08;Unboxing&#xff09;是指将包装类型&#xff08;Wrapper Types&#xff09;转换为其对应的原始类型&#xff08;Primitive Types&#xff09;。Java拆箱通常发生在将一个包装类型的对象转换为原始类型时。 Java中的包装类型包括以下几种&#xff1a; In…

微信小程序获取openid

1.需要小程序中调用 wx.login获取临时code值&#xff08;每次获取的code值只能用一次&#xff09; wx.login({success (res) {console.log(res)} }) 打印结果为&#xff1a; 2.调用微信提供的apid接口&#xff0c;获取openid&#xff0c;入参需要三个参数&#xff1a;AppID(小…

从Spring说起

一. Spring是什么 在前面的博文中,我们学会了SpringMVC的使用,可以完成一些基本功能的开发了,但是铁子们肯定有很多问题,下面来从Spring开始介绍,第一个问题,什么是Spring? Spring是包含了众多工具方法的IOC容器. Spring有两个核心思想--IOC和AOP,本章先来讲解IOC...... 1.1…

【星海出品】VUE(四)

事件处理 事件内联JS语句&#xff08;类似于onclick&#xff09; 方法事件处理器&#xff1a;一个指向组件上定义的方法的属性名或是路径。 App.vue关闭掉了&#xff0c;所以就要重新运行一下。 <template><h3>event demo</h3><button click"count…

阿里云推出AI编程工具“通义灵码“;生成式 AI 入门教程 2

&#x1f989; AI新闻 &#x1f680; 阿里云推出AI编程工具"通义灵码"&#xff0c;支持多种语言及实时续写功能 摘要&#xff1a;阿里云推出了一款名为"通义灵码"的AI编程工具&#xff0c;支持多种主流编程语言&#xff0c;包括Java、Python、Go等。该工…

CTF-Reverse---VM虚拟机逆向[HGAME 2023 week4]vm题目复现【详解】

文章目录 前言0x1[HGAME 2023 week4]vm提取汇编指令mov指令push指令&pop指令运算操作cmp指令jmp指令je 和 jne exp 前言 没有前言。终于搞定第二题了。费劲是真的费。 题目在nssctf上有。 这一题写完才看到有提示&#xff0c;是关于构建结构体的&#xff0c;下次试试。 0x…