首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:实现 Trie (前缀树)

#yyds干货盘点# LeetCode程序员面试金典:实现 Trie (前缀树)

时间:2023-08-06 23:01:04浏览次数:40  
标签:node yyds search word Trie 金典 app null

题目:

发音类似 "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 {
    private Trie[] children;
    private boolean isEnd;

    public Trie() {
        children = new Trie[26];
        isEnd = false;
    }
    
    public void insert(String word) {
        Trie node = this;
        for (int i = 0; i < word.length(); i++) {
            char ch = word.charAt(i);
            int index = ch - 'a';
            if (node.children[index] == null) {
                node.children[index] = new Trie();
            }
            node = node.children[index];
        }
        node.isEnd = true;
    }
    
    public boolean search(String word) {
        Trie node = searchPrefix(word);
        return node != null && node.isEnd;
    }
    
    public boolean startsWith(String prefix) {
        return searchPrefix(prefix) != null;
    }

    private Trie searchPrefix(String prefix) {
        Trie node = this;
        for (int i = 0; i < prefix.length(); i++) {
            char ch = prefix.charAt(i);
            int index = ch - 'a';
            if (node.children[index] == null) {
                return null;
            }
            node = node.children[index];
        }
        return node;
    }
}

标签:node,yyds,search,word,Trie,金典,app,null
From: https://blog.51cto.com/u_13321676/6987519

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:课程表
    题目:你这个学期必须选修numCourses门课程,记为 0 到 numCourses-1。在选修某些课程之前需要一些先修课程。先修课程按数组 prerequisites给出,其中 prerequisites[i]=[ai,bi],表示如果要学习课程 ai则必须先学习课程 bi。例如,先修课程对 [0,1]表示:想要学习......
  • #yyds干货盘点# LeetCode程序员面试金典:统计各位数字都不同的数字个数
    1.简述:给你一个整数n,统计并返回各位数字都不同的数字x的个数,其中0<=x<10n 。 示例1:输入:n=2输出:91解释:答案应为除去11、22、33、44、55、66、77、88、99外,在0≤x<100范围内的所有数字。示例2:输入:n=0输出:12.代码实现:classSolution{publicintcount......
  • CMU15445-2023 笔记:Project 0 - Copy-On-Write Trie
    CMU15445-2023笔记:Project0-Copy-On-WriteTrieInthisproject,youwillimplementakey-valuestorebackedbyacopy-on-writetrie.Triesareefficientordered-treedatastructuresforretrievingavalueforagivenkey.Tosimplifytheexplanation,we......
  • centos7 Cannot retrieve metalink for repository: epel/x86_64. Please verify its
     备份原始的EPEL存储库配置文件(可选):在更改前,建议您先备份原始的EPEL存储库配置文件,以便在需要时恢复到默认设置。在终端中执行以下命令备份:sudocp/etc/yum.repos.d/epel.repo/etc/yum.repos.d/epel.repo.backup编辑EPEL存储库配置文件:使用文本编辑器(例如nano......
  • #yyds干货盘点#Redis分布式锁正确打开方式
    1、为什么要有分布式锁?JUC提供的锁机制,可以保证在同一个JVM进程中同一时刻只有一个线程执行操作逻辑;多服务多节点的情况下,就意味着有多个JVM进程,要做到这样,就需要有一个中间人;分布式锁就是用来保证在同一时刻,仅有一个JVM进程中的一个线程在执行操作逻辑;换句话说,JUC的锁和分布式锁都......
  • [Ynoi2010] y-fast trie(multiset+思维)
    题目传送门solution妙妙题。分成\(a+b\geqC\)和\(a+b<C\)讨论。第一类是简单的,只需要选择最大和次大的数就行了。第二类加入是容易的,但是有删除。常规做法是线段树分治+\(multiset\),不能在线。考虑一个性质:如果对于\(x\),小于等于\(C-1-x\)的最大的\(y\)记作\(m......
  • KMP与Trie
    KMP算法KMP算法用于解决字串与母串的匹配问题,可看作哈希的简单写法,时间复杂度O(m+n)KMP算法的核心优势在于相对于暴力枚举,它可以省去重复的步骤,从而将匹配过程由O(mn)优化为近似O(2m),该算法的核心在于寻找子串前缀与后缀重合的最大长度,也就是next数组,那么怎么求呢?就是将子串自匹......
  • #yyds干货盘点#map()和flatMap()的区别?
    在Java8中,map()和flatMap()是StreamAPI中的两个常用方法,用于对流中的元素进行转换操作。它们的主要区别在于它们的返回类型和转换方式。map()方法:map()方法将流中的每个元素都映射到另一个对象。它接收一个函数作为参数,该函数将当前流中的每个元素转换为另一个对象。map()方法的......
  • # yyds干货盘点 # 盘点一个可以一键免费下载图片的谷歌插件
    大家好,我是皮皮。一、前言前几天在Python知识星球里边看到【七年】大佬推荐的一个谷歌浏览器插件,可以一键下载浏览器中的图片或者PPT,这里也推荐给大家,一起来看看吧!二、实现过程这个插件是免费的,非常奈斯,但是在谷歌浏览器中下载的时候,需要借助ti子,在谷歌浏览器应用商店里边搜索【图......
  • # yyds干货盘点 # 盘点一个Python递归的基础题目
    大家好,我是皮皮。一、前言前几天在Python黄金群【维哥】问了一个Python递归的基础问题,一起来看看吧。看上去代码没多少哈,但是韵味无穷。二、实现过程很多初学者遇到这个问题,很容易把答案说成是3,2,2这样,其实正好相反,这里【巭孬嫑勥烎】给了一个解释。这么一看好像还是不太好理解,看看......