#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; }