当前位置:网站首页>leetcode-6108:解密消息

leetcode-6108:解密消息

2022-07-05 05:46:00 菊头蝙蝠

leetcode-6108:解密消息

题目

题目连接
给你字符串 keymessage ,分别表示一个加密密钥和一段加密消息。解密 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" 中每个字母的首次出现可以得到替换表。

在这里插入图片描述

解题

方法一:哈希表

1.通过哈希map,记录每个字母在key中第一次出现的顺序,并赋于相应的字母。
2.空格直接跳过,替换字母

class Solution {
    
public:
    string decodeMessage(string key, string message) {
    
        unordered_map<char,char> map;
        
        char c='a';
        for(int i=0;i<key.size();i++){
    
            if(key[i]==' ') continue;
            if(!map.count(key[i])){
    
                map[key[i]]=c;
                c++;
            }
        }
        for(int i=0;i<message.size();i++){
    
            if(message[i]==' ') continue;
            char c=message[i];
            message[i]=map[c];
        }
        return message;
    }
};
原网站

版权声明
本文为[菊头蝙蝠]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_21539375/article/details/125587751