列表

详情


2325. 解密消息

给你字符串 keymessage ,分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下:

  1. 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序
  2. 将替换表与普通英文字母表对齐,形成对照表。
  3. 按照对照表 替换 message 中的每个字母。
  4. 空格 ' ' 保持不变。

返回解密后的消息。

 

示例 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" 中每个字母的首次出现可以得到替换表。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: string decodeMessage(string key, string 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

上一题