class Solution {
public:
string decodeMessage(string key, string message) {
}
};
2325. 解密消息
给你字符串 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
由小写英文字母和 ' '
组成原站题解
java 解法, 执行用时: 6 ms, 内存消耗: 41 MB, 提交时间: 2023-02-01 09:56:25
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(); } }
javascript 解法, 执行用时: 56 ms, 内存消耗: 43.5 MB, 提交时间: 2023-02-01 09:56:03
/** * @param {string} key * @param {string} message * @return {string} */ var decodeMessage = function(key, message) { let cur = 'a'; const rules = new Map(); for (let i = 0; i < key.length; ++i) { const c = key[i]; if (c !== ' ' && !rules.has(c)) { rules.set(c, cur); cur = String.fromCharCode(cur.charCodeAt() + 1); } } let ret = ''; for (let i = 0; i < message.length; ++i) { let c = message[i]; if (c !== ' ') { c = rules.get(c); } ret += c; } return ret; };
golang 解法, 执行用时: 0 ms, 内存消耗: 2.3 MB, 提交时间: 2023-02-01 09:55:46
func decodeMessage(key string, message string) string { cur := byte('a') rules := map[rune]byte{} for _, c := range key { if c != ' ' && rules[c] == 0 { rules[c] = cur cur++ } } m := []byte(message) for i, c := range message { if c != ' ' { m[i] = rules[c] } } return string(m) }
python3 解法, 执行用时: 32 ms, 内存消耗: 15 MB, 提交时间: 2022-07-06 11:16:36
class Solution: def decodeMessage(self, key: str, message: str) -> str: _map = defaultdict(str) key = key.replace(' ', '') i = 0 for c in key: if _map[c] == '': _map[c] = chr(ord('a') + i) i += 1 ans = '' for c in message: if c == ' ': ans += c else: ans += _map[c] return ans