2325:解密消息

This commit is contained in:
轩辕龙儿 2023-02-02 13:53:12 +08:00
parent c1bb578c2a
commit 8bca655aea
2 changed files with 149 additions and 0 deletions

View File

@ -0,0 +1,97 @@
////给你字符串 key message 分别表示一个加密密钥和一段加密消息解密 message 的步骤如下
//
//
// 使用 key 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序
// 将替换表与普通英文字母表对齐形成对照表
// 按照对照表 替换 message 中的每个字母
// 空格 ' ' 保持不变
//
//
//
// 例如key = "happy boy"实际的加密密钥会包含字母表中每个字母 至少一次据此可以得到部分对照表'h' -> 'a''a' ->
//'b''p' -> 'c''y' -> 'd''b' -> 'e''o' -> 'f'
//
//
// 返回解密后的消息
//
//
//
// 示例 1
//
//
//
//
//输入key = "the quick brown fox jumps over the lazy dog", message = "vkbs bs t
//suepuv"
//输出"this is a secret"
//解释对照表如上图所示
//提取 "the quick brown fox jumps over the lazy dog" 中每个字母的首次出现可以得到替换表
//
//
// 示例 2
//
//
//
//
//输入key = "eljuxhpwnyrdgtqkviszcfmabo", message = "zwx hnfx lqantp mnoeius
//ycgk vcnjrdb"
//输出"the five boxing wizards jump quickly"
//解释对照表如上图所示
//提取 "eljuxhpwnyrdgtqkviszcfmabo" 中每个字母的首次出现可以得到替换表
//
//
//
//
// 提示
//
//
// 26 <= key.length <= 2000
// key 由小写英文字母及 ' ' 组成
// key 包含英文字母表中每个字符'a' 'z'至少一次
// 1 <= message.length <= 2000
// message 由小写英文字母和 ' ' 组成
//
//
// Related Topics 哈希表 字符串 👍 59 👎 0
package leetcode.editor.cn;
import java.util.HashMap;
import java.util.Map;
// 2325:解密消息
public class DecodeTheMessage {
public static void main(String[] args) {
Solution solution = new DecodeTheMessage().new Solution();
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public String decodeMessage(String key, String message) {
char cur = 'a';
Map<Character, Character> rules = new HashMap<Character, Character>();
for (int i = 0; i < key.length(); ++i) {
char c = key.charAt(i);
if (c != ' ' && !rules.containsKey(c)) {
rules.put(c, cur);
++cur;
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < message.length(); ++i) {
char c = message.charAt(i);
if (c != ' ') {
c = rules.get(c);
}
sb.append(c);
}
return sb.toString();
}
}
//leetcode submit region end(Prohibit modification and deletion)
}

View File

@ -0,0 +1,52 @@
<p>给你字符串 <code>key</code><code>message</code> ,分别表示一个加密密钥和一段加密消息。解密 <code>message</code> 的步骤如下:</p>
<ol>
<li>使用 <code>key</code> 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 <strong>顺序</strong></li>
<li>将替换表与普通英文字母表对齐,形成对照表。</li>
<li>按照对照表 <strong>替换</strong> <code>message</code> 中的每个字母。</li>
<li>空格 <code>' '</code> 保持不变。</li>
</ol>
<ul>
<li>例如,<code>key = "<em><strong>hap</strong></em>p<em><strong>y</strong></em> <em><strong>bo</strong></em>y"</code>(实际的加密密钥会包含字母表中每个字母 <strong>至少一次</strong>),据此,可以得到部分对照表(<code>'h' -&gt; 'a'</code><code>'a' -&gt; 'b'</code><code>'p' -&gt; 'c'</code><code>'y' -&gt; 'd'</code><code>'b' -&gt; 'e'</code><code>'o' -&gt; 'f'</code>)。</li>
</ul>
<p>返回解密后的消息。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/05/08/ex1new4.jpg" style="width: 752px; height: 150px;" /></p>
<pre>
<strong>输入:</strong>key = "the quick brown fox jumps over the lazy dog", message = "vkbs bs t suepuv"
<strong>输出:</strong>"this is a secret"
<strong>解释:</strong>对照表如上图所示。
提取 "<em><strong>the</strong></em> <em><strong>quick</strong></em> <em><strong>brown</strong></em> <em><strong>f</strong></em>o<em><strong>x</strong></em> <em><strong>j</strong></em>u<em><strong>mps</strong></em> o<em><strong>v</strong></em>er the <em><strong>lazy</strong></em> <em><strong>d</strong></em>o<em><strong>g</strong></em>" 中每个字母的首次出现可以得到替换表。
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/05/08/ex2new.jpg" style="width: 754px; height: 150px;" /></p>
<pre>
<strong>输入:</strong>key = "eljuxhpwnyrdgtqkviszcfmabo", message = "zwx hnfx lqantp mnoeius ycgk vcnjrdb"
<strong>输出:</strong>"the five boxing wizards jump quickly"
<strong>解释:</strong>对照表如上图所示。
提取 "<em><strong>eljuxhpwnyrdgtqkviszcfmabo</strong></em>" 中每个字母的首次出现可以得到替换表。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>26 &lt;= key.length &lt;= 2000</code></li>
<li><code>key</code> 由小写英文字母及 <code>' '</code> 组成</li>
<li><code>key</code> 包含英文字母表中每个字符(<code>'a'</code><code>'z'</code><strong>至少一次</strong></li>
<li><code>1 &lt;= message.length &lt;= 2000</code></li>
<li><code>message</code> 由小写英文字母和 <code>' '</code> 组成</li>
</ul>
<div><div>Related Topics</div><div><li>哈希表</li><li>字符串</li></div></div><br><div><li>👍 59</li><li>👎 0</li></div>