前缀树又叫单词查找树/字典树,Tire树,是哈希树的变种。典型应用于统计,排序和保存大量字符串,经常被搜索引擎系统用于文本词频统计。
前缀树的每一个节点会有多个子节点,通往不同子节点的路径上有着不同的字符串(不仅限于字符串)。
优点:可以利用字符串的公共前缀来减少查询时间,最大限度地减少不必要的字符串比较,查询效率比哈希树高。

前缀树每个节点都有一个子节点数组用于保存路径,当问题需要解决在一个集合中查找是否存在另一个集合的元素前缀时,考虑使用前缀树。

实现(leetcode版)

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;
    }
}

前缀树TrieNode相关推荐

  1. SpringBoot使用前缀树过滤敏感词

    前缀树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利 ...

  2. 前缀树实现敏感词过滤

    前缀树的节点类 为了方便功能的实现,我们需要有一个Boolean类型的变量来标记该节点是否为叶子节点, 同样的为了方便判断是否存在某个字符在前缀树中,可以把子节点作成Map的形式,Map的key为该字 ...

  3. 算法练习day13——190401(前缀树、贪心策略拼接字符串使字典序最小)

    1.前缀树(Trie Tree) 1.1 字符串生成前缀树的过程 字母是填在路上的,不是填在节点上的. 首先是一个空的头结点: 加入"abc"到这棵树中: 头结点有到a的路吗?没有 ...

  4. Java 实现 Trie (前缀树)

    LeetCode:https://leetcode-cn.com/problems/implement-trie-prefix-tree/ 什么是前缀树 Trie(发音类似 "try&quo ...

  5. LeetCode 208. 实现 Trie (前缀树) —— 提供一套前缀树模板

    208. 实现 Trie (前缀树) Ideas 前缀树嘛,直接套模板咯,把之前写的拿过来抄一遍. 提供一下我的模板. Code Python class TrieNode:def __init__( ...

  6. leetcode 208. Implement Trie (Prefix Tree) | 208. 实现 Trie 前缀树(Java)

    题目 https://leetcode.com/problems/implement-trie-prefix-tree/ 题解 第一版:暴力法 import java.util.LinkedHashS ...

  7. 算法入门篇七 前缀树

    牛客网 左程云老师的算法入门课 找二叉树的节点的后继节点 原则 如果节点有右子树,那么后继节点就是右子树的最左边的第一个节点 如果节点没有右子树,如果节点是父节点的右孩子,就继续往上找,直到找到一个父 ...

  8. 【LeetCode笔记】208. 实现Trie(前缀树)(Java、前缀树)

    文章目录 题目描述 思路 & 代码 更新版 题目描述 属于那种,敲过一遍就不会忘了的那种题,就是学一个新的数据结构= = 二十六叉树! 思路 & 代码 isEnd 非常重要噢,只有正式 ...

  9. [leetcode]211. 添加与搜索单词 - 数据结构设计 ---前缀树解法

    前缀树解法: struct TrieNode {bool isEnd;TrieNode *next[26];TrieNode(){isEnd = false;memset(next, NULL, si ...

最新文章

  1. 机器学习(8)朴素贝叶斯算法(20条新闻分类)
  2. 原创 | 看过《中国机长》,我开始关心航空预测性维修这件事了
  3. uniapp中easycom组件的封装
  4. 第二章:Android游戏开发之前台渲染
  5. 数字编码电位器c语言,数字电位器——x9c104
  6. mysql 日期函数大全_MYSQL 日期函数大全
  7. MySQL数据库性能优化之硬件瓶颈分析
  8. HDU - 5875 Function [单调性剪枝+预处理]
  9. A Singular Value Decomposition Approach For Recommendation Systems
  10. Visio的下载和安装
  11. 解决Iframe嵌入帆软BI系统后,Chrome升级后跨域出现登录界面,Cookie写入不成功。解决办法
  12. 为什么会存在乱码?什么是编解码?为什么会有这么多字符集?
  13. 安装了汉化包,svn却没有汉化
  14. 为什么倡导企业使用电子招投标?
  15. 微信开发errcode:40125
  16. 社群运营的八大变现模式
  17. code force 449 div2 C. Nephren gives a riddle
  18. 华为机试真题 C++ 实现【处理器问题】【2022.11 Q4 新题】
  19. MacOS 更新系统或XCode终端Git报错
  20. 单片机——C51实验含Proteus仿真(独立键盘,矩阵键盘)

热门文章

  1. java imageio temp_java-使用ImageIO.write jpg文件时出现问题:粉红色背景
  2. 获取SSL证书private key私钥文件的步骤
  3. iOS开发者账号申请
  4. 使用 Keras 进行面部表情识别
  5. 旁观面经-02-开发岗总结版
  6. Adobe Premiere基础特效(卡点和转场)(四)
  7. 前端一(HTML、CSS)
  8. Purdue, Mathematics Area Examination 学习笔记(1)
  9. redo synch writes在什么情况下发生
  10. python工资自动发放_python自动化办公--协助财务自动发送工资条