leetcode--trie树

LeetCode 实现Trie(前缀树) 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。 示例: Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // 返回 true trie.search("app"); // 返回 false trie.startsWith("app"); ... 阅读详情

208. 实现 Trie (模板题)

题目

class TrieNode{
    boolean isWord;
    TrieNode[] children=new TrieNode[26];

    TrieNode() {}
}

class Trie {
    TrieNode root;

    /** Initialize your data structure here. */
    public Trie() {
        root=new TrieNode();
    }
    
    /** Inserts a word into the trie. */
    public void insert(String word) {
        TrieNode cur=root;
        for(int i=0;i<word.length();i++){
            int c=word.charAt(i)-'a';
            if(cur.children[c]==null){
                cur.children[c]=new TrieNode();
            }
            cur=cur.children[c];
        }
        cur.isWord=true;
    }
    
    /** Returns if the word is in the trie. */
    public boolean search(String word) {
        TrieNode cur=root;
        for(int i=0;i<word.length();i++){
            int c=word.charAt(i)-'a';
            if(cur.children[c]==null){
                return false;
            }
            cur=cur.children[c];
        }
        if(cur.isWord){
            return true;
        }else{
            return false;
        }
    }
    
    /** Returns if there is any word in the trie that starts with the given prefix. */
    public boolean startsWith(String prefix) {
        TrieNode cur=root;
        for(int i=0;i<prefix.length();i++){
            int c=prefix.charAt(i)-'a';
            if(cur.children[c]==null){
                return false;
            }
            cur=cur.children[c];
        }
        return true;
    }
}

820. 单词的压缩编码

题目
给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。

例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#” 和 indexes = [0, 2, 5]。

对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复我们之前的单词列表。

那么成功对给定单词列表进行编码的最小字符串长度是多少呢?

示例:

输入: words = [“time”, “me”, “bell”]
输出: 10
说明: S = “time#bell#” ,indexes = [0, 2, 5] 。

class Solution {
    public int minimumLengthEncoding(String[] words) {
        int len = 0;
        Trie trie = new Trie();
        // 先对单词列表根据单词长度由长到短排序
        Arrays.sort(words, (s1, s2) -> s2.length() - s1.length());
        // 单词插入trie,返回该单词增加的编码长度
        for (String word: words) {
            len += trie.insert(word);
        }
        return len;
    }
}

// 定义tire
class Trie {
    
    TrieNode root;
    
    public Trie() {
        root = new TrieNode();
    }

    public int insert(String word) {
        TrieNode cur = root;
        boolean isNew = false;
        // 倒着插入单词
        for (int i = word.length() - 1; i >= 0; i--) {
            int c = word.charAt(i) - 'a';
            if (cur.children[c] == null) {
                isNew = true; // 是新单词
                cur.children[c] = new TrieNode();
            }
            cur = cur.children[c];
        }
        // 如果是新单词的话编码长度增加新单词的长度+1,否则不变。
        return isNew? word.length() + 1: 0;
    }
}

class TrieNode {
    char val;
    TrieNode[] children = new TrieNode[26];

    public TrieNode() {}
}

作者:sweetiee
链接:https://leetcode-cn.com/problems/short-encoding-of-words/solution/99-java-trie-tu-xie-gong-lue-bao-jiao-bao-hui-by-s/

面试题 17.13. 恢复空格

题目
可参考之前写过的题解

class Solution {
    public int respace(String[] dictionary, String sentence) {
        //构建字典树
        Trie trie=new Trie();
        for(String word:dictionary){
            trie.insert(word);
        }

        //动态规划
        int n=sentence.length();
        int[] dp=new int[n+1];
        for(int i=1;i<=n;i++){
            dp[i]=dp[i-1]+1;
            for(int idx:trie.search(sentence,i-1)){
                dp[i]=Math.min(dp[i],dp[idx]);
            }
        }
        return dp[n];
    }
}

class TrieNode{
    boolean isWord;
    TrieNode[] children=new TrieNode[26];

    public TrieNode() {}
}

class Trie{
    TrieNode root;
    public Trie(){
        root=new TrieNode();
    }

    //单词倒序插入字典树
    public void insert(String word){
        TrieNode cur=root;
        for(int i=word.length()-1;i>=0;i--){
            int c=word.charAt(i)-'a';
            if(cur.children[c]==null){
                cur.children[c]=new TrieNode();
            }
            cur=cur.children[c];
        }
        cur.isWord=true;
    }

    // 找到 sentence中以endPos为结尾的单词,返回这些单词的开头下标
    public List<Integer> search(String sentence,int endPos){
        List<Integer> indicies=new ArrayList<>();
        TrieNode cur=root;
        for(int i=endPos;i>=0;i--){
            int c=sentence.charAt(i)-'a';
            if(cur.children[c]==null){
                break;
            }
            cur=cur.children[c];
            if(cur.isWord){
                indicies.add(i);
            }
        }
        return indicies;
    }
    
}

336. 回文对

题解

根据哈夫曼编码写的数据压缩解压软件(java实现) 根绝哈夫曼编码写的数据压缩解压软件 立即下载

相关推荐

基于深度强化学习技术优化无线网络中的资源分配(一)DQN部分代码

这是一个GitHub上的开源项目,链接:https://github.com/alexis-anzaldo/Deep-Reinforcement-Learning-for-resource-allocation-in-wireless-networks该项目旨在通过深度强化学习DQL技术优化无线网络中的资源分配,特别关注小型蜂窝和超密集无线蜂窝网络中的功率控制问题,主要目标是提高DRL模型的学习效率和网络吞吐量。

m0_46292040的博客 1538

【图论】Leetcode 208. 实现 Trie (前缀树)【中等】

4、搜索字符串时,从根节点开始遍历,依次查找对应的子节点,如果遇到空节点或者到达字符串末尾但标志位为false,则返回false,否则返回true。TrieNode 类包含了一个包含26个链接的数组,代表了从当前节点出发的所有可能的字符路径,进行嵌套链接节点(类似于链表,只不过里面是节点集合)。3、插入字符串时,从根节点开始遍历,依次将字符串的每个字符插入对应的子节点中,如果到达字符串末尾,将标志位设置为true。2、每个节点除了指向子节点的指针外,还需要一个标志位,表示当前节点是否是一个单词的结束。

FLGB 1404

通俗易懂的图解二叉搜索树、AVL树和红黑树

搜索是一种很常见的需求,当数据较多时,如何找到目标对象时,即需要搜索查找。 那么如何快速找到目标呢,最朴素的思想就是暴力查找,一个一个对比。 显然,当数据量增大时,我们需要优化查找方法获取更快的查找速度,我们可以通过维护一个有序数组,从而实现二分查找,查找速度从O(n)降为O(longn)。 但是数组并不便于插入和删除,链表便成为了最好的选择。 既然是采用二分查找,那么不如直接按照查找的步骤维护一种数据结构,于是二叉搜索树出现了。 二叉搜索树的性质为: 若左子树不为空,则左子树上所有节点值都小于根结点值;

暗色光的博客 758

LeetCode 单词的压缩编码(前缀树)

给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。 例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#” 和 indexes = [0, 2, 5]。 对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复我们之前的单词列表。 那么成功对给定单词列表进行编码的...

hestyle的博客 7832

STM32以太网通信-STM32以太网外设(ETH)

通过 DMA 控制器进行介质访问控制 (MAC) STM32F4xx系列控制器内部集成了一个以太网外设,它实际上是一个通过DMA控制器进行介质访问控制(MAC),它的功能就是实现MAC 层的任务。 借助以太网外设,STM32F4xx 控制器可以通过ETH 外设按照IEEE 802.3-2002 标准发送和接收MAC 数据包。 ETH 内部自带专用的DMA 控制器用于MAC,ETH 支持两个工业标准接口介质独立接口(MII)和简化介质独立接口(RMII)用于与外部PHY 芯片连接。MII 和RMII 接口用于

暖暖_的_纠结的博客 2万+

VS2015与QT界面开发中解决‘ui_xxx.h‘文件类名不一致导致的编译错误

本文详细解析了在VS2015与QT界面开发中,因.ui文件顶层部件objectName与生成类名不一致导致'ui_xxx.h'文件出现'不完整的类型'编译错误的根本原因。通过分步排查,指导开发者统一Qt设计师对象名、自动生成文件类名及代码引用名,并提供强制重新编译UI文件、清理中间文件等解决方案,有效解决此类常见编译问题。

weixin_29009339的博客 248

每日一题:单词的压缩编码 / 字典树的应用

给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。 例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#” 和 indexes = [0, 2, 5]。 对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复我们之前的单词列表。 那么成功对给定单词列表进...

Xiami2019的博客 340

MAX31855电路和程序,实现SPI和软件模拟时序两种方式读取数据

1. 概述 MAX31855为热电偶至数字输出转换器,内置14位模/数转换器(ADC)。器件带有冷端补偿检测和修正、数字控制器、SPI兼容接口,以及相关的控制逻辑,在温度控制器、过程控制或监测系统中设计用于配合外部微控制器(μC)工作。提供多个版本的器件,每个版本针对特定的热电偶类型(K、J、N、T或E型)进行优化和调整。热电偶类型以器件型号后缀表示(例如MAX31855K)。 器件输出14位...

睿思派克 1万+

LeetCode 820. 单词的压缩编码(后缀树)

文章目录1. 题目2. 解题2.1 反转字符串+字符查找2.2 后缀树 1. 题目 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。 例如,如果这个列表是 ["time", "me", "bell"],我们就可以将其表示为 S = "time#bell#" 和 indexes = [0, 2, 5]。 对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符...

Michael是个半路程序员 2359

ADS交叉耦合振荡器VCO相位噪声优化仿真实践

本文详细介绍了在ADS软件中搭建和优化交叉耦合VCO相位噪声的完整仿真实践。通过谐波平衡与瞬态仿真分析电路性能,并重点阐述了通过提升谐振腔Q值、优化晶体管工作点及改善尾电流源来有效降低相位噪声的具体方法,为射频电路设计提供了实用指南。

weixin_29235923的博客 633

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题5)-网络部分解析-附详细代码

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题5)-网络部分解析-附详细代码

bfq05234214的博客 416

Leetcode 820:单词的压缩编码(超详细的解法!!!)

给定一个单词列表,我们将这个列表编码成一个索引字符串S与一个索引列表A。 例如,如果这个列表是["time", "me", "bell"],我们就可以将其表示为S = "time#bell#"和indexes = [0, 2, 5]。 对于每一个索引,我们可以通过从字符串S中索引的位置开始读取字符串,直到"#"结束,来恢复我们之前的单词列表。 那么成功对给定单词列表进行编码的最小字符串长度是多少呢...

coordinate的博客 1860

生产环境中redis的SCAN命令如何替代KEYS命令?

本文介绍了使用SCAN命令替代KEYS的完整方案。SCAN通过游标分批迭代,避免KEYS命令遍历整个键空间导致的阻塞风险。文章详细说明了SCAN的基础语法、迭代流程和Java实现示例,强调必须关闭Cursor避免连接泄漏。针对生产环境,提供了COUNT参数调优、客户端去重、集群模式适配等优化建议,并列举了典型错误场景。SCAN通过分批次迭代和游标管理,可安全实现高性能键空间遍历。全文150字。

DN金猿的博客 179

208. 实现 Trie (前缀树)【 力扣(LeetCode) 】

Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。【最坏情况下,就是每个字母都有 26 个后续, 则全部空间为 26 x 26】【除了初始化,其他三个操作的复杂度都为 n ,n 表示字符串长度】

yyh520025的博客 669

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java中前缀树(Trie)的简介与使用 LeetCode 力扣 720 词典中最长的单词

Trie树是一种特殊的N叉树,又称字典树,单词查找树,键树等。一般用于字符串的储存,查找,比较,偶尔也会用于删除。除根节点外,Trie树的每一个节点包含一个字符,每个节点的子节点字符不重复(但不同节点可以有相同的子节点,比如表示字符串“aa”和“ba”)。从根节点到某一节点的路径为该节点对应的字符串,因此每条路径上的字符排列应该是唯一的。 Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销,对字符串的查找通常效率高于哈希表。 画一棵前缀树: 可以看到前缀树的几个要点: 黄色的是根

mschessy的博客 429

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

(leetcode)力扣100 54实现Trie树

本文介绍了Trie树(前缀树)的实现,这是一种高效存储和检索字符串的数据结构。Trie树通过子节点数组(26个小写字母)和结束标志位实现字符串存储。主要操作包括:插入单词时逐个字符创建节点路径并标记结尾;查找完整单词需路径存在且结尾标记为真;查找前缀只需路径存在即可。时间复杂度为O(L),L为单词长度。该结构适用于自动补全、拼写检查等场景,能高效处理字符串的存储和查询需求。

qq_62235017的博客 111

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

leetcode之Trie树

1.Trie树的介绍 Trie树定义 没错他就是这样的一个树 红色表示是一个单词, 白色表示前缀。 Trie树的应用 Trie树 2.Trie树代码 3.实例 leetcode中208, Trie树的实现 注意:可以理解为边存的是字母而点存的是isWord, 所以是在遍历完所有字母后,再次进行判断是否为单词。 class Trie { private: bool isEnd; Trie *next[26]; public: /** Initialize your da

fuzekun的博客 273

【算法】Trie数(前缀树/字典树)简介及Leetcode上关于前缀树的题

前几天同学面今日头条被问到了Trie树,刚好我也对于Trie树这种数据结构不是很熟悉,所以研究了一下前缀树,然后把Leetcode上关于前缀树的题都给做了一遍。 Leetcode上关于前缀树的题有如下: 208. Implement Trie (Prefix Tree)这道题是实现一个前缀树,作为基础题啦 Add and Search Word - Data structure design这道题是

haolexiao的专栏 8453

力扣——实现 Trie (前缀树)

【代码】力扣——实现 Trie (前缀树)

weixin_49332521的博客 666

208. 实现 Trie (前缀树) - 力扣(LeetCode)

本文实现了一个Trie(字典树)数据结构,包含TrieNode和Trie两个类。TrieNode类表示树的节点,包含子节点字典和单词结束标志。Trie类提供三个核心方法:insert()用于插入单词,构建字典树;search()检查单词是否存在;startsWith()判断是否存在以给定前缀开头的单词。该实现通过逐字符遍历的方式高效处理字符串的存储和查询,适用于自动补全、拼写检查等场景。

Rickest_man的博客 459

LeetCode100之实现Trie前缀树(208)--Java

这道题是叫我们实现一个高效查找单词和前缀的Trie,需要我们对数据结构有一点了解和经验。这里我们提供的思路是每一个节点有26个子节点,但是每一个单词在该节点只存放一个的字符,这样前缀相同的单词,可以复用相同的节点,用一个是否为单词的标记来提醒截止该节点,是否是一个存储在其中的完整单词。

2301_79318558的博客 1369

力扣 208.实现Trie(前缀树)

初始化:创建一棵 26 叉树,一开始只有一个根节点 root。26 叉树的每个节点包含一个长为 26 的儿子节点列表 son,以及一个布尔值 end,表示是否为终止节点。遍历字符串 word,同时用一个变量 cur 表示当前在 26 叉树的哪个节点,初始值为 root。如果 word[i] 不是 cur 的儿子,那么创建一个新的节点 node 作为 cur 的儿子。如果 word[i]=a,那么把 node 记录到 cur 的 son[0] 中。

qq_51352130的博客 749

Leetcode208 Trie 实现前缀树

Leetcode208 Trie 实现前缀树 题目 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。 分析 字典树关键在于节点的结构的设定。利用字符串的公共前缀节省空间。 节点结构应该需要一个节点指针数组代表路径。一个变量记录是否是叶子。 拓展增加数量的记录,需要增加经过该节点的字符串数量和以其为结尾的数量。 节点结构如下...

windyear 381

[LeetCode] Trie(前缀树)题型总结

文章目录写在前面208. 实现 Trie (前缀树) 写在前面 本篇博客主要讲解对LeetCode中Tier类型题的解法归纳和思考和对算法本身的一些理解。 208. 实现 Trie (前缀树) 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。 示例: Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // 返回 true trie.search("app")

virgilshi的博客 337

【手把手带你刷Leetcode力扣】11.数据结构 - 字典树/前缀树Trie

字典树/前缀树Trie 自动匹配的程序 数组:[goog, googl, google, bai, baidu, gi] g goog googl google gi go goog googl google 插入:O(N) 搜索:O(N) 前缀存在:O(NM)(元素个数匹配的时间复杂度) Trie root节点 root = Trie() 孩子节点 Hash 结束Flag 对应的值 插入:O(K) 搜索:O(K) 前缀存在:O(K) 词频统计 学习视频来源B站—爱学习的饲养员—手把手带你刷Le

ZZBOOM_的博客 312

【Java力扣算法】LeetCode 208 实现 Trie (前缀树)

题目: 实现一个 Trie (前缀树),包含insert,search, 和startsWith这三个操作。 示例: Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // 返回 true trie.search("app"); // 返回 false trie.startsWith...

懂技术的猫 368
上一篇: leetcode动态规划——字符串系列
下一篇: Pytorch学习笔记
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值