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

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

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

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

思路:

这道题就是求字符串后缀,如果字符串a的后缀包含字符串b,那么b就不用再添加

字典树

先将字符串数组按照长度排序,将字符串长的先添加进去,之后遍历长度短的。

按照逆序将字符串插入字典树,后面的字符串如果可以在字典树之中找到,那么就不用添加这个字符串,反之,将这个字符串也逆序插入字典树

示例:

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

提示:

1 <= words.length <= 2000
1 <= words[i].length <= 7
每个单词都是小写字母 。

代码:

class Solution {

public Tree root = new Tree();

class Tree{

Tree children[] = new Tree[26];

char val;

}

public int minimumLengthEncoding(String[] words) {

if(words.length==0){

return 0;

}

Arrays.sort(words, (s1, s2) -> s2.length() - s1.length());

int count = 0;

for(int i=0;i<words.length;i++)

{

count+=insert(words[i]);

}

return count;

}

public int insert(String word)

{

Tree 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 Tree();

}

cur =cur.children[c];

}

return isNew?word.length()+1:0;

}

}

Leetcode--820:单词的压缩编码(java)相关推荐

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

    文章目录 1. 题目 2. 解题 2.1 反转字符串+字符查找 2.2 后缀树 1. 题目 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 [&q ...

  2. 820. 单词的压缩编码

    820. 单词的压缩编码 思路:reverse后排序,只需要比较相邻的字符串 class Solution { public:int minimumLengthEncoding(vector<s ...

  3. 字典树实现_leetcode之820. 单词的压缩编码 | python极简实现字典树

    题目 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 ["time", "me", "bell& ...

  4. leetcode 290. 单词规律(Java版)

    题目 https://leetcode-cn.com/problems/word-pattern/ 题解 题目要求 pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着 双向连接 ...

  5. LeetCode 140. 单词拆分 II(DP+回溯)

    1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使 ...

  6. LeetCode 126. 单词接龙 II(图的BFS)

    1. 题目 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列. 转换需遵循如下规则: 每次转换只能 ...

  7. LeetCode 127. 单词接龙(图的BFS/双向BFS)

    文章目录 1. 题目 2. 图的BFS解题 2.1 单向BFS 2.2 双向BFS !厉害了 1. 题目 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord ...

  8. LeetCode 212. 单词搜索 II(Trie树+DFS)

    1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&qu ...

  9. LeetCode题库整理【Java】—— 3 无重复字符的最长子串

    LeetCode题库整理[Java] ## 3 无重复字符的最长子串 题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" ...

最新文章

  1. FTP服务(vsftpd)配置
  2. 【转】 (C#)利用Aspose.Cells组件导入导出excel文件
  3. 一文搞定哈希(六种构建、四种冲突解决方法、查找算法总结)
  4. noip2017d2t2
  5. Zabbix的应用(6)----常见错误
  6. SpringBoot (15)---事务处理
  7. C#------引用System.Data.Entity后DbContext依然无法继承解决方法
  8. python读取txt每一行-Python逐行读取txt文本,按符合分割词并逐行写入txt
  9. 六石管理学:提出分形进度的概念
  10. 华为全系Visio图标下载链接
  11. socket 源码分析
  12. 【网络安全】单选/多选/判断/填空题
  13. network location awareness 错误
  14. 对接有道翻译api中英翻译软件
  15. 北京政协:电子垃圾回收是亟待破解的难题
  16. 与、或、非、同或、异或、蕴含的表示 C/C++
  17. python24小时12小时转换_Python上24小时时间转换为12小时制(ProblemSetQuestion)
  18. c++ 复合类型 读书笔记(二)
  19. OpenGL学习——入门篇 第三章 四个变换及模拟地球公转
  20. 天梯选拔:先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数

热门文章

  1. MySQL 基本查询、条件查询、投影查询
  2. LeetCode 468. 验证IP地址
  3. LeetCode 133. 克隆图(图的BFS/DFS)
  4. pythonmain是什么意思_Python中if __name__ == __main__详细解释
  5. 斯特林发动机图纸尺寸_南昌教学模型订做,航空发动机模型_境海模型
  6. 【机器学习】逻辑回归—良/恶性乳腺癌肿瘤预测
  7. android 打开移动开关,教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可...
  8. 搭配对比学习,万能的 prompt 还能做可控文本生成
  9. 丹琦女神新作:对比学习,简单到只需要Dropout两下
  10. 鲍捷 | 知识表示——面向实战的介绍