Leetcode--Java--820. 单词的压缩编码
题目描述
样例描述
思路
方法一:存储后缀 + 哈希去重
如果一个单词不是任何其他单词的后缀,那么它就是最短的编码。反之,是的话可以删除。
- 首先全部加入Set集合去重,对于每个单词,结合数据范围,依次在set里面删除它们所有的后缀。剩余的就是可编码的单词。加上1(#字符)的长度就是答案
方法二:排序 + 字典树 - 在方法一的基础上,可以把所有单词逆序挂在trie树上(方便查找后缀),在不断插入到树中,如果是新的单词,就需要编码为长度加一,否则直接用树上的不需要编码
- 注意要让长的单词先插入,如果短的先插入,并且是某长的后缀,将会被视为不同的。例如time,和me。 所以要先降序排序
代码
class Solution {public int minimumLengthEncoding(String[] words) {Set<String> set = new HashSet<>(Arrays.asList(words));//枚举删除每个单词的所有后缀for (String word: words) {//由数据范围比较小,直接枚举删除for (int k = 1; k < word.length(); k ++ ) {set.remove(word.substring(k, word.length()));}}//剩余的单词不是任何其他单词的后缀, 因此加上1 (#字符)求和就是答案int ans = 0;for (String s: set) {ans += s.length() + 1;}return ans;}
}
trie树
class Solution {class TrieNode {TrieNode tns[];boolean isWord;public TrieNode() {tns = new TrieNode[26];}}private TrieNode root;public int insert(String word) {TrieNode p = root;//是否是新的,原trie树中不存在boolean isNew = false;for (int i = word.length() - 1; i >= 0; i -- ) {int u = word.charAt(i) - 'a';if (p.tns[u] == null) {isNew = true;p.tns[u] = new TrieNode();}p = p.tns[u];}//是新的话,就返回长度加一(#的字符),否则不用编码return isNew ? word.length() + 1 : 0;}public int minimumLengthEncoding(String[] words) {root = new TrieNode();//降序排序Arrays.sort(words, (a, b) ->{return b.length() - a.length();});int ans = 0;for (String s: words) {ans += insert(s);}return ans;}
}
Leetcode--Java--820. 单词的压缩编码相关推荐
- 820. 单词的压缩编码
820. 单词的压缩编码 思路:reverse后排序,只需要比较相邻的字符串 class Solution { public:int minimumLengthEncoding(vector<s ...
- LeetCode 820. 单词的压缩编码(后缀树)
文章目录 1. 题目 2. 解题 2.1 反转字符串+字符查找 2.2 后缀树 1. 题目 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 [&q ...
- 字典树实现_leetcode之820. 单词的压缩编码 | python极简实现字典树
题目 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 ["time", "me", "bell& ...
- leetcode 字符串之单词
leetcode 字符串之单词 leetcode820. 单词的压缩编码 1. 题目 2. 解答 leetcode139. 单词拆分 1. 题目 2. 解答 leetcode127. 单词接龙 1. ...
- LeetCode 244. 最短单词距离 II(哈希map+set二分查找)
文章目录 1. 题目 2. 解题 2.1 暴力超时 2.2 哈希表+set二分查找 1. 题目 请设计一个类,使该类的构造函数能够接收一个单词列表. 然后再实现一个方法,该方法能够分别接收两个单词 w ...
- LeetCode 245. 最短单词距离 III
文章目录 1. 题目 2. 解题 1. 题目 给定一个单词列表和两个单词 word1 和 word2,返回列表中这两个单词之间的最短距离. word1 和 word2 是有可能相同的,并且它们将分别表 ...
- LeetCode 243. 最短单词距离
文章目录 1. 题目 2. 解题 1. 题目 给定一个单词列表和两个单词 word1 和 word2,返回列表中这两个单词之间的最短距离. 示例: 假设 words = ["practice ...
- java英语单词测试_Java 英语单词自测
Java英语单词自测小游戏 编写初衷 记英语单词的时候,不知道记没记住,所以写了个检测的程序,在检测的同时,也能够复习之前学习的. 任务目标 创建数据库 Java编写代码(没写成GUI,觉着写成GUI ...
- 11、java常用单词(转载)
abstract (关键字) 抽象 ['.bstr.kt] access vt.访问,存取 ['.kses]'(n.入口,使用权) algorithm n.算法 ['.lg.riem] annotat ...
- JAVA常用单词汇总
Java 常用英语汇总 abstract (关键字) access 抽象 ['.bstr.kt] vt.访问,存取 ['.kses]'(n.入口,使用权) n.算法 ['.lg.riem] algor ...
最新文章
- Delphi7的主窗口
- 【Android】Parse开发笔记(1)—— 准备
- 电脑知识:分享实用的电脑维护小常识
- RuoYi-Vue 部署 Linux环境 若依前后端分离项目(jar包+nginx 多机版本)
- Navicat for MySQL 使用SSH方式链接远程数据库
- android webview capturepicture,android webView截图的4种方法
- Bokeh 增加交互方式
- ROS学习:智能车室外光电组仿真
- 单例模式2014-12
- IE报错,VS定位不到错误的常见原因
- flume与log4j的整合
- OFDM中的DC subcarrier
- 新版傻妞对接QQ完整版(10月24日)
- Ant安装与配置build.xml文件说明
- 微信小程序实现地图导航功能
- logstash解析iis日志
- cath数据库fasta备注_sam's note
- k8s :pod has unbound immediate PersistentVolumeClaims
- QGraphicsView图形视图框架使用(三)位移变换和图元定位
- 技术积累 — SecureCRT串口工具及其使用说明