Java实现 LeetCode 820 单词的压缩编码(暴力)
2021/7/9 17:09:16
本文主要是介绍Java实现 LeetCode 820 单词的压缩编码(暴力),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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] 。
提示:
1 <= words.length <= 2000
1 <= words[i].length <= 7
每个单词都是小写字母 。
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() {} }
这篇关于Java实现 LeetCode 820 单词的压缩编码(暴力)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南