文章
时间轴
标签
音乐室
友人帐
一刻时光
清单
留言板
相册
算法海洋
关于
Slcpの童话镇 🏰
写文章
2325. 解密消息
简单
Java
数据结构与算法
原题链接
发布日期:
2023年02月01日
文章字数:
5.1k
阅读次数:
452
阅读时长:
0小时0分0秒
# 方法一 ![image-20230201095732034](https://img.slcp.top/image-20230201095732034.png) ## 解题思路 利用`数组`制作一张码表映射,然后对密文进行翻译 > 复杂度分析 时间复杂度:`O(m+n)`,其中` m `和` n `分别是` key `和` message `的长度。 空间复杂度:`O(n+m)` ## 代码 ```java class Solution { public String decodeMessage(String key, String message) { StringBuilder sb = new StringBuilder(); for(char c : key.toCharArray()) { if(!sb.toString().contains(String.valueOf(c)) && ' ' != c) { sb.append(c); } } key = sb.toString(); sb.delete(0, sb.length()); for(char m : message.toCharArray()) { if(' ' == m) { sb.append(m); continue; } sb.append((char)(97+key.indexOf(String.valueOf(m)))); } return sb.toString(); } } ``` # 方法二 ![image-20230201095305111](https://img.slcp.top/image-20230201095305111.png) ## 解题思路 利用`HashMap`制作一张码表映射,然后对密文进行翻译 > 复杂度分析 时间复杂度:`O(m+n)`,其中` m `和` n `分别是` key `和` message `的长度。 空间复杂度:`O(n+|Σ|)` ## 代码 ```java class Solution { public String decodeMessage(String key, String message) { HashMap<Character, Character> map = new HashMap<Character, Character>(); for (int i = 0; i < key.length() && map.size() < 26; ++i) { char c = key.charAt(i); if (map.containsKey(c) || c == ' ') { continue; } map.put(c, (char)('a' + map.size())); } StringBuffer sb = new StringBuffer(); for (char c : message.toCharArray()) { if (c == ' ') { sb.append(' '); continue; } sb.append(map.get(c)); } return sb.toString(); } } ``` # 方法三 ![image-20230201100442574](https://img.slcp.top/image-20230201100442574.png) ## 解题思路 使用a-z的int值作为数组下标存储转换值,避免了hash时间 - 构建byte` 转换数组 ` - 遍历key中的每个char,将未出现过的char和转换值插入到` 转换数组 `中 - 遍历message的每个char,使用` 转换数组 `进行字节替换 > 复杂度分析 时间复杂度:`O(m+n)`,其中` m `和` n `分别是` key `和` message `的长度。 空间复杂度:`O(n+m)` ## 代码 ```java class Solution { public String decodeMessage(String key, String message) { byte[] convertArray = new byte[128]; byte[] keyArray = key.getBytes(); byte[] messageArray = message.getBytes(); byte targetByte = 'a'; for(byte currentByte : keyArray) { if(currentByte == ' ') { continue; } if(convertArray[currentByte] != 0) { continue; } convertArray[currentByte] = targetByte; targetByte++; } for(int i=0; i<messageArray.length; i++) { if(messageArray[i] == ' ') { continue; } messageArray[i] = convertArray[messageArray[i]]; } return new String(messageArray); } } ```
您阅读这篇文章共耗时:
0小时16分34秒
文章链接:
https://www.slcp.top/article/read/1620611064454643714
版权声明:
本博客所有文章除特別声明外,均采用
CC BY 4.0
许可协议。转载请注明来源
Slcp
!
转载文章以及部分引用均为自己整理记录学习而用,若有侵权,请联系删除。
Java
数据结构与算法
评论
Valine
Gitalk
目录
搜索
首页
前进
后退
刷新
申请友链
在线联系