题解 | #字符串加密#
字符串加密
https://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
#include <iostream>
#include <cstring>
#include <unordered_set>
#include <map>
using namespace std;
int main() {
string a, query, beg;
cin >> a >> query;
//先对输入字符串按顺序进行哈希
unordered_set<char> h;
for(int i = 0; i < a.size(); i ++)
{
if(!h.count(a[i]))
{
h.insert(a[i]);
beg += a[i]; //字符串beg是哈希后的密钥前缀
}
}
//利用map将正常子母表与密钥进行映射
map<char, char> mp;
for(int i = 0; i < beg.size(); i ++)
mp['a' + i] = beg[i];
//new_begin是正常字母表中正要映射哪一位
char new_begin = 'a' + beg.size();
for(char ch = 'a'; ch <= 'z'; ch ++)
{
//对刚刚前缀中没有出现的字母按顺序进行映射
if(!h.count(ch))
{
h.insert(ch);
mp[new_begin ++] = ch;
}
}
for(int i = 0; i < query.size(); i ++)
printf("%c", mp[query[i]]);
return 0;
}