图解LeetCode——2325. 解密消息

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 图解LeetCode——2325. 解密消息

一、题目

  • 给你字符串 keymessage ,分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下:
  • 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序
  • 将替换表与普通英文字母表对齐,形成对照表。
  • 按照对照表 替换message 中的每个字母。
  • 空格 ' ' 保持不变。
  • 例如,key = "happy boy"(实际的加密密钥会包含字母表中每个字母 至少一次),据此,可以得到部分对照表('h' -> 'a''a' -> 'b''p' -> 'c''y' -> 'd''b' -> 'e''o' -> 'f')。返回解密后的消息。

二、示例

2.1> 示例1

【输入】key = "the quick brown fox jumps over the lazy dog", message = "vkbs bs t suepuv"

【输出】"this is a secret"

2.2> 示例2

【输入】key = "eljuxhpwnyrdgtqkviszcfmabo", message = "zwx hnfx lqantp mnoeius ycgk vcnjrdb"

【输出】"the five boxing wizards jump quickly"

提示:

  • 26 <= key.length <= 2000
  • key小写英文字母 ' ' 组成
  • key 包含英文字母表中每个字符('a''z')至少一次
  • 1 <= message.length <= 2000
  • message小写英文字母 ' ' 组成

三、解题思路

  • 根据题目描述,我们需要遍历字符串key,当遍历到第1个字符并且是第1次出现的时候,那么它所对应的加密字符就是‘a’,当遍历到第2个字符并且是第1次出现的时候,那么它所对应的解密字符就是‘b’,以此类推……所以,为了能够判断某个字符是否是第1次出现,则需要我们提前构建密码表dickey用于保存字符value用于保存对应的解密字符。这样,当我们发现dic表中已经存在对应的加密字符的话,则直接获取解密字符即可。
  • 当我们遍历完字符串key中的所有字符之后,随之的字典表dic也创建完毕了。那么下一步骤,我们就可以遍历message执行解密操作了。
  • 在上面的处理过程中,我们发现,很多算法题都需要涉猎字符与数字的相互转换,以及字符串与字符数组的转换,其转换方式如下所示:
  • 字符——>数字

int num = item - 'a'; // 字符a对应数字0

  • 数字——>字符

char chr = (char) (dic[c - 'a'] + 'a'); // 数字0对应字符a

  • 字符数组——>字符串

char[] c = ...;

String s = new String(c);

  • 字符串——>字符数组

String s = ...;

char[] c = s.toCharArray();

四、代码实现

classSolution {
publicStringdecodeMessage(Stringkey, Stringmessage) {
intv=1, len=message.length(); // v等于1,对应字符‘a’char[] result=newchar[len];
int[] dic=newint[26];  
for (charitem : key.toCharArray()) // 构造密码字典映射if (item!=' '&&dic[item-'a'] ==0) dic[item-'a'] =v++;
for (inti=0; i<len; i++) { // 执行解密操作charc=message.charAt(i);
result[i] =c==' '?c : (char) (dic[c-'a'] +'a'-1);
        }
returnnewString(result);
    }
}


今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

相关文章
|
5月前
|
算法 C语言
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
|
3月前
|
缓存 算法 Java
刷算法,你应该知道的队列经典应用
文章介绍了队列的基本特性和经典应用,包括如何用队列实现栈、使用优先级队列解决Top K问题,并通过LeetCode题目示例展示了队列在算法实现中的应用。
刷算法,你应该知道的队列经典应用
|
5月前
|
算法 C语言
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
|
5月前
|
算法
【数据结构与算法 经典例题】随机链表的复制(图文详解)
【数据结构与算法 经典例题】随机链表的复制(图文详解)
|
6月前
|
机器学习/深度学习 存储 算法
数据结构与算法⑨(第三章_下)队列的概念和实现(力扣:225+232+622)(下)
数据结构与算法⑨(第三章_下)队列的概念和实现(力扣:225+232+622)
23 0
|
6月前
|
算法 前端开发 C语言
数据结构与算法⑨(第三章_下)队列的概念和实现(力扣:225+232+622)(上)
数据结构与算法⑨(第三章_下)队列的概念和实现(力扣:225+232+622)
36 0
|
6月前
|
存储 缓存 算法
【数据结构与算法-初学者指南】【附带力扣原题】队列
【数据结构与算法-初学者指南】【附带力扣原题】队列
|
容器
力扣206反转链表:代码实现+图文全解+方法总结(四种方法)
力扣206反转链表:代码实现+图文全解+方法总结(四种方法)
165 0
|
6月前
|
数据安全/隐私保护
leetcode-6108:解密消息
leetcode-6108:解密消息
37 0
|
11月前
|
算法
【LeetCode刷题日志】232.用栈实现队列
【LeetCode刷题日志】232.用栈实现队列