实现 Trie (前缀树)

这篇具有很好参考价值的文章主要介绍了实现 Trie (前缀树)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目链接

实现 Trie (前缀树)

题目描述

实现 Trie (前缀树),算法TOP100,数据结构,leetcode,算法,前缀树

注意点

  • word 和 prefix 仅由小写英文字母组成

解答思路

  • 首先要理解前缀树是什么,参照该篇文章【图解算法】模板+变式——带你彻底搞懂字典树(Trie树)
  • 在了解前缀树是什么后,设计前缀树就会更加容易,因为本题中所有单词都仅由小写英文字母组成,所以哈希表只需要26个空间即可,若有些单词具有相同的前缀,则可视为它们有相同的父节点,也就是相当于构造一棵最大有26个子节点的二叉树,构造树的过程可以由以下图片表示:

实现 Trie (前缀树),算法TOP100,数据结构,leetcode,算法,前缀树文章来源地址https://www.toymoban.com/news/detail-684723.html

代码

class Trie {
    TrieNode root;

    public Trie() {
        root = new TrieNode();
    }
    
    public void insert(String word) {
        TrieNode currNode = root;
        for (char c : word.toCharArray()) {
            if (currNode.childNode[c - 'a'] == null) {
                currNode.childNode[c - 'a'] = new TrieNode();
            }
            currNode = currNode.childNode[c - 'a'];
        }
        currNode.isWord = true;
    }
    
    public boolean search(String word) {
        TrieNode currNode = root;
        for (char c : word.toCharArray()) {
            if (currNode.childNode[c - 'a'] == null) {
                return false;
            }
            currNode = currNode.childNode[c - 'a'];
        }
        if (!currNode.isWord) {
            return false;
        }
        return true;
    }
    
    public boolean startsWith(String prefix) {
        TrieNode currNode = root;
        for (char c : prefix.toCharArray()) {
            if (currNode.childNode[c - 'a'] == null) {
                return false;
            }
            currNode = currNode.childNode[c - 'a'];
        }
        return true;
    }
}

class TrieNode {
    boolean isWord;
    TrieNode[] childNode = new TrieNode[26];
}

关键点

  • 学习前缀树的相关知识
  • 构造前缀树的过程

到了这里,关于实现 Trie (前缀树)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构与算法】前缀和+哈希表算法

    关于前缀和和哈希这两个概念大家都不陌生,在之前的文章中也有过介绍:前缀和与差分算法详解 而哈希表最经典的一题莫过于 两数之和 题目链接 题目描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它

    2024年02月01日
    浏览(103)
  • 【字典树/trie树】实现高效插入和查询字符串的数据结构

    本文是https://www.acwing.com/problem/content/description/837/的总结,有兴趣可以做做 字典树的实现依赖于树结构,有两种操作,1是插入字符串,2是查找字符串。使用idx维护最新的结点下标。如下图,假设我们维护一个   可以看到,我们维护了一个树形结构储存了左边的字符串,但是

    2024年02月03日
    浏览(41)
  • 数据结构与算法:堆排序和TOP-K问题

    朋友们大家好,本节内容来到堆的应用:堆排序和topk问题 我们在c语言中已经见到过几种排序,冒泡排序,快速排序(qsort) 冒泡排序的时间复杂度为O(N 2 ),空间复杂度为O(1);qsort排序的时间复杂度为 O(nlogn),空间复杂度为O(logn),而今天所讲到的堆排序在时间与空间复杂度上相

    2024年03月08日
    浏览(45)
  • 【尚硅谷】数据结构和算法——前缀、中缀、后缀表达式规则

    跟着B站的尚硅谷学习数据结构与算法,语言为java,目前是第七个代码内容——前缀、中缀、后缀表达式 课程传送门:尚硅谷——前缀、中缀、后缀表达式 1)前缀表达式又称波兰式, 前缀表达式 的运算符位于操作符之前。 2)举例说明:(3+4)*5-6 对应的前缀表达式就是 - *

    2024年02月03日
    浏览(45)
  • 【数据结构与算法】【12】前缀表达式、中缀表达式、后缀表达式

    什么是前缀表达式、中缀表达式、后缀表达式 前缀表达式、中缀表达式、后缀表达式,是通过树来存储和计算表达式的三种不同方式 以如下公式为例 ( a + ( b − c ) ) ∗ d ( a+(b-c) )*d ( a + ( b − c ) ) ∗ d 通过树来存储该公式,可以表示为 那么问题就来了,树只是一种抽象的数据

    2024年02月08日
    浏览(38)
  • 【高级数据结构】Trie树

    高效地存储和查询字符串的数据结构。所以其重点在于:存储、查询两个操作。 示例和图片来自:https://blog.csdn.net/qq_42024195/article/details/88364485 假设有这么几个字符串:b,abc,abd,bcd,abcd,efg,hii。最终存储出来的Trie图如下图所示: 具体是怎么存的呢?对于每一个字符串,

    2024年03月10日
    浏览(30)
  • 数据结构——前缀、中缀、后缀表达式实现和转换(Java)

    1.7.1 概念 它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于 运算符相对与操作数的位置 不同 前缀 表达式的运算符位于与其相关的 操作数之前 ;中缀和后缀同理。 平时我们 日常使用 并最为熟悉的就是中缀表达式。如: 1 + 2 *

    2024年02月05日
    浏览(42)
  • 【数据结构】堆的实现,堆排序以及TOP-K问题

    目录 1.堆的概念及结构 2.堆的实现 2.1初始化堆 2.2销毁堆 2.3取堆顶元素 2.4返回堆的大小 2.5判断是否为空 2.6打印堆 2.7插入元素 2.8堆的向上调整 2.9弹出元素 2.10堆的向下调整 3. 建堆时间复杂度 4. 堆的应用 4.1 堆排序 4.2 TOP-K问题 堆是一种数据结构,它是由一组元素组成的,并

    2024年02月12日
    浏览(40)
  • 【数据结构】深刨Trie树(字典树)

    Trie 树,也叫“字典树”。顾名思义,它是一个树形结构。它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。 Trie 树的本质,就是利 用字符串之间的公共前缀,将重复的前缀合并在一起 。 举个例子,现在我们要存储一些字

    2023年04月13日
    浏览(25)
  • 高级数据结构 Trie树(字典树)

    (Trie Tree)字典树_Rkun18的博客-CSDN博客 构造字典树 这里使用维基百科里的一幅图举例,由于只是举例,使用较小的26个字母,把大小写统一规定成小写,图里’A’变成’a’,方便构造树 先序遍历 main方法运行: Trie获取所有单词 深度搜索trie树,对于正在搜索的节点node 遍历

    2024年02月02日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包