首页 > 其他分享 >【LeeCode】820. 单词的压缩编码

【LeeCode】820. 单词的压缩编码

时间:2023-03-01 23:31:46浏览次数:56  
标签:String minimumLengthEncoding length public 单词 LeeCode words new 820

【题目描述】

单词数组 ​​words​​ 的 有效编码 由任意助记字符串 ​​s​​​ 和下标数组 ​​indices​​ 组成,且满足:

  • ​words.length == indices.length​
  • 助记字符串 ​​s​​ 以 ​​'#'​​ 字符结尾
  • 对于每个下标 ​​indices[i]​​ ,​​s​​ 的一个从 ​​indices[i]​​ 开始、到下一个 ​​'#'​​ 字符结束(但不包括 ​​'#'​​)的 子字符串 恰好与 ​​words[i]​​ 相等

给你一个单词数组 ​​words​​ ,返回成功对 ​​words​​ 进行编码的最小助记字符串 ​​s​​ 的长度 。

​​​​https://leetcode.cn/problems/short-encoding-of-words/​


【示例】

【LeeCode】820. 单词的压缩编码_System


【代码】​​存储后缀​

很巧妙的思路

package com.company;
import java.util.*;

// 2023-03-01
class Solution {
public int minimumLengthEncoding(String[] words) {
List<String> list = Arrays.asList(words);
Set<String> set = new HashSet<>(list);

System.out.println("去重前: " + set);
// 删除words中可能重复的字符
for (String x: words){
for (int i = 1; i < x.length(); i++){
set.remove(x.substring(i));
}
}
System.out.println("去重后: " + set);
int res = 0;
for (String x : set){
res += x.length() + 1;
}
System.out.println("res: " + res);
return res;
}
}


public class Test {
public static void main(String[] args) {
new Solution().minimumLengthEncoding(new String[]{"time", "me", "bell"} ); // 输出:10
new Solution().minimumLengthEncoding(new String[]{"t"} ); // 输出:2
}
}


【代码】​​优解​

package com.company;
import java.util.*;

// 2023-03-01
class Solution {
public int minimumLengthEncoding(String[] words) {
// 先按字符串长度进行排序
Arrays.sort(words, (w1, w2) -> w2.length() - w1.length());

// 然后在进行匹配的计算
String sb = new String();
for (String word : words) {
if (!sb.contains(word + "#")) {
sb = sb.concat(word + "#");
}
}
System.out.println(sb);
return sb.length();
}
}
public class Test {
public static void main(String[] args) {
new Solution().minimumLengthEncoding(new String[]{"time", "me", "bell"} ); // 输出:10
new Solution().minimumLengthEncoding(new String[]{"t"} ); // 输出:2
}
}

标签:String,minimumLengthEncoding,length,public,单词,LeeCode,words,new,820
From: https://blog.51cto.com/u_13682316/6094388

相关文章

  • 背单词
    Mainlineversion(开发版)Stableversion(稳定版)Legacyversions(历史版)......
  • 524. 通过删除字母匹配到字典里最长单词 (Medium)
    问题描述524.通过删除字母匹配到字典里最长单词(Medium)给你一个字符串s和一个字符串数组dictionary,找出并返回dictionary中最长的字符串,该字符串可以通过删除s......
  • 课堂练习01题目:计算最长英语单词链总结
     一、题目内容:大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N个不同的英语单词,我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词......
  • 【LeeCode】2024. 考试的最大困扰度
    【题目描述】一位老师正在出一场由 ​​n​​​ 道判断题构成的考试,每道题的答案为true(用 ​​'T'​​​ 表示)或者false(用 ​​'F'​​ 表示)。老师想增加学生对自......
  • 【LeeCode】957. N 天后的牢房 -- todo
    【题目描述】监狱中 ​​8​​ 间牢房排成一排,每间牢房可能被占用或空置。每天,无论牢房是被占用或空置,都会根据以下规则进行变更:如果一间牢房的两个相邻的房间都被占用或......
  • 【LeeCode】剑指 Offer II 088. 爬楼梯的最少成本-- todo
    【题目描述】数组的每个下标作为一个阶梯,第 ​​i​​​ 个阶梯对应着一个非负数的体力花费值 ​​cost[i]​​​(下标从 ​​0​​ 开始)。每当爬上一个阶梯都要花费对......
  • 得分最高的单词集合
    题目你将会得到一份单词表words,一个字母表letters(可能会有重复字母),以及每个字母对应的得分情况表score。请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」:能......
  • 计算最长英语单词
    计算最长英语单词链的题目为:大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N个不同的英语单词,我们能否写一个程序,快速找出最长的能首尾相连的英语单词......
  • 今日课上测试题总结-计算最长英语单词链
    今天软工课上老师留的作业总结一下1importjava.io.*;2importjava.util.*;34publicclassMaxlist{56publicstaticvoidmain(String[]args)th......
  • 计算最长英语单词链思路
    首先就是做好输入文件读取文件和输出文件,可以在菜鸟教程去找,然后学习代码模板,把读入和读出写好。然后就是解决文件中的换行读取。有的读入写法不能读下行的字符。可以用菜......