首页 > 其他分享 >前缀树问题

前缀树问题

时间:2024-03-20 11:01:36浏览次数:20  
标签:index PrefixNode 前缀 temp int chars next 问题

前缀树

思路来源

一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到

笔记内容

  • 问题来源:力扣208.实现Trie (前缀树)

  • 问题描述:

    Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。

    请你实现 Trie 类:

    • Trie() 初始化前缀树对象。
    • void insert(String word) 向前缀树中插入字符串 word
    • boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false
  • 算法思路

    • 记录一个空头结点
    • 插入字符串:从头结点出发查找next数组中是否含有到下一字符的路径,不存在则创建;跳到该结点,pass++;在最后一个字符对应结点时,end++;
    • 查找字符串:跟插入做法相似,查找路径,若出现next数组对应结点为空直接返回false;若到达最后一个字符,查看该点end是否大于0,若为0返回false,若大于0返回true;
    • 删除字符串:先用查找方法判断是否插入过该字符串;若存在,则按照查找的方式遍历路径,对pass--;对于最后一个字符,end--;若不存在直接返回false。
  • 代码实现

    class PrefixNode {
            public int pass;
            public int end;
            public PrefixNode[] next;
    
            public PrefixNode() {
                this.pass = 0;
                this.end = 0;
                next = new PrefixNode[26];
            }
        }
    
            //增
            public void addNode(String string){
                PrefixNode temp = head;
                char[] chars = string.toCharArray();
                for (int i = 0; i < chars.length; i++) {
                    int index = chars[i] - 'a';
                    PrefixNode node;
                    if(temp.next[index] == null){
                        node = new PrefixNode();
                    }else {
                        node = temp.next[index];
                    }
                    if(i == chars.length-1){
                        node.end++;
                    }
                    node.pass++;
                    temp.next[index] = node;
                    temp = node;
                }
    
            }
    
            //查
            public boolean search(String string){
                char[] chars = string.toCharArray();
                PrefixNode temp = head;
                for (int i = 0; i < chars.length; i++) {
                    int index = chars[i]-'a';
                    if(temp.next[index] == null){return false;}
                    temp = temp.next[index];
                }
                if(temp.end > 0){return true;}
                return false;
            }
    
            //删
            public boolean delete(String string){
                if(!search(string)){
                    return false;
                }else {
                    char[] chars = string.toCharArray();
                    PrefixNode temp = head;
                    for (int i = 0; i < chars.length; i++) {
                        int index = chars[i]-'a';
                        temp.pass--;
                        temp = temp.next[index];
                    }
                    temp.end--;
                    return true;
                }
            }
    

标签:index,PrefixNode,前缀,temp,int,chars,next,问题
From: https://www.cnblogs.com/nouleeee/p/18084763

相关文章

  • 解决el-input无法输入的问题和表单验证失败问题
    el-input无法输入的问题和表单验证失败问题原因1、el-input组件没有绑定双向响应式数据(v-model)解决方案:在data中定义一个变量,然后在el-input组件中使用v-model进行双向数据绑定,这样子就会解决el-input组件无法输入的问题了。原因2、组件嵌套太深(具体原因不清楚,只知......
  • WPF --- 触摸屏下的两个问题
    合集-桌面应用(8) 1.WPF---非Button自定义控件实现点击功能2023-08-172.MVVM---实现多层级通知2023-08-053.WPF---TextBox的输入校验2023-11-164.WPF---重写圆角DataGrid样式2023-11-175.WPF---如何重写WPF原生控件样式2023-11-176.WPF---如何以Binding方式隐......
  • leaflet频繁切换mapbox矢量图层-短暂空白问题
    leaflet加载mapbox矢量图层-最佳方案推荐闪烁问题比如现在有卫星图和mapboxgl矢量图层,两者有时常常需要切换,但在切换回矢量图层时,会出先短暂的空白问题(就是初始化图层),那有什么办法,可以实现平滑过渡切换呢解决思路大概讲一下思路,就是在切换卫星图时,矢量图层不要立刻移除,通过......
  • 粘包问题
    粘包问题须知:只有TCP有粘包现象,UDP永远不会粘包一、什么是粘包问题什么时候会发生粘包问题?当TCP传输和接收的数据并非我们规定的最大数据量时,就会发生粘包我们日常传输的数据几乎不可能等于我们规定的数据量,所以我们必须要解决这个问题为什么只有TCP会发生粘包问题?T......
  • 倾斜摄影三维模型的模型合并的问题分析
    倾斜摄影三维模型的模型合并的问题分析   倾斜摄影是一种通过无人机或其他航空平台获取大范围地表影像和点云数据的技术,可以生成高分辨率、高精度的三维模型。在实际应用中,常常需要将不同区域的倾斜摄影三维模型进行合并,以便进行全局分析和应用。然而,模型合并过程中存在......
  • LiveGBS流媒体平台GB/T28181常见问题-与海康NCG大华VIS等国标平台对接如何判断自身是
    LiveGBS与海康NCG大华VIS等国标平台对接如何判断自身是上级还是下级?1、背景2、判定上级或是下级3、LiveGBS作为上级4、LiveGBS作为下级5、搭建GB28181视频直播平台1、背景国标项目实施的过程中,经常要与海康、大华、华为、宇视等国标视频平台对接,此时LiveGBS是作为下......
  • parse_str解析问题
    php解析raw格式数据: $raw_params=file_get_contents("php://input");收到原数据格式,得到类似:operator_token=10ac2753e78abxxxxx62d1f70fc2aaca&secret_key=bff7e71e45bad3ccexxx76e309&operator_player_session=RXZvR3dIMmpDUDZIL3hHZm0vdHRQZz09Ojo0iswLEYe3w/7P+F......
  • Python 机器学习 HMM模型三种经典问题
    ​ 隐马尔可夫模型(HiddenMarkovModel,HMM)是一个强大的工具,用于模拟具有隐藏状态的时间序列数据。HMM广泛应用于多个领域,如语音识别、自然语言处理和生物信息学等。在处理HMM时,主要集中于三个经典问题:评估问题、解码问题和学习问题。三个问题构成了使用隐马尔可夫模型时的基础......
  • 浅记高维前缀和
    考虑如下问题:记\(y\subsetx\leftrightarrowx\&y=y\)。若\(x\subsety\),称\(x\)为\(y\)的一个子集,\(y\)为\(x\)的一个超集。给定数组\(f\),求数组\(g\)。其中\(g_x=\sum_{y\subsetx}{f_y}\)。设\(f\)中最大的数二进制下共有\(n\)位。如果直接枚举子集的话,时......
  • 配置云服务器遇到的问题总结
    发现网上很多教程都是没毛用的,所以总结一下背景买了个华为云的服务器,想自己写个服务器本地ping不通云服务器核心原因:安全策略墙了解决方案:登录华为云官网www.huaweicloud.com点击“控制台”找到自己的云服务器往下滑找到更改安全组新建安全组......