Leetcode--820:单词的压缩编码(java)
给定一个单词列表,我们将这个列表编码成一个索引字符串 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)相关推荐
- LeetCode 820. 单词的压缩编码(后缀树)
文章目录 1. 题目 2. 解题 2.1 反转字符串+字符查找 2.2 后缀树 1. 题目 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 [&q ...
- 820. 单词的压缩编码
820. 单词的压缩编码 思路:reverse后排序,只需要比较相邻的字符串 class Solution { public:int minimumLengthEncoding(vector<s ...
- 字典树实现_leetcode之820. 单词的压缩编码 | python极简实现字典树
题目 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 ["time", "me", "bell& ...
- leetcode 290. 单词规律(Java版)
题目 https://leetcode-cn.com/problems/word-pattern/ 题解 题目要求 pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着 双向连接 ...
- LeetCode 140. 单词拆分 II(DP+回溯)
1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使 ...
- LeetCode 126. 单词接龙 II(图的BFS)
1. 题目 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列. 转换需遵循如下规则: 每次转换只能 ...
- LeetCode 127. 单词接龙(图的BFS/双向BFS)
文章目录 1. 题目 2. 图的BFS解题 2.1 单向BFS 2.2 双向BFS !厉害了 1. 题目 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord ...
- LeetCode 212. 单词搜索 II(Trie树+DFS)
1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&qu ...
- LeetCode题库整理【Java】—— 3 无重复字符的最长子串
LeetCode题库整理[Java] ## 3 无重复字符的最长子串 题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" ...
最新文章
- FTP服务(vsftpd)配置
- 【转】 (C#)利用Aspose.Cells组件导入导出excel文件
- 一文搞定哈希(六种构建、四种冲突解决方法、查找算法总结)
- noip2017d2t2
- Zabbix的应用(6)----常见错误
- SpringBoot (15)---事务处理
- C#------引用System.Data.Entity后DbContext依然无法继承解决方法
- python读取txt每一行-Python逐行读取txt文本,按符合分割词并逐行写入txt
- 六石管理学:提出分形进度的概念
- 华为全系Visio图标下载链接
- socket 源码分析
- 【网络安全】单选/多选/判断/填空题
- network location awareness 错误
- 对接有道翻译api中英翻译软件
- 北京政协:电子垃圾回收是亟待破解的难题
- 与、或、非、同或、异或、蕴含的表示 C/C++
- python24小时12小时转换_Python上24小时时间转换为12小时制(ProblemSetQuestion)
- c++ 复合类型 读书笔记(二)
- OpenGL学习——入门篇 第三章 四个变换及模拟地球公转
- 天梯选拔:先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数
热门文章
- MySQL 基本查询、条件查询、投影查询
- LeetCode 468. 验证IP地址
- LeetCode 133. 克隆图(图的BFS/DFS)
- pythonmain是什么意思_Python中if __name__ == __main__详细解释
- 斯特林发动机图纸尺寸_南昌教学模型订做,航空发动机模型_境海模型
- 【机器学习】逻辑回归—良/恶性乳腺癌肿瘤预测
- android 打开移动开关,教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可...
- 搭配对比学习,万能的 prompt 还能做可控文本生成
- 丹琦女神新作:对比学习,简单到只需要Dropout两下
- 鲍捷 | 知识表示——面向实战的介绍