逆向思考
class Encrypter {
private:
//储存dictionary中所有可以解密后各字符串的数量
unordered_map<string,int> hj;
unordered_map<char,string> cut;
public:
Encrypter(vector<char>& keys, vector<string>& values, vector<string>& dictionary) {
int n=keys.size();
for(int i=0;i<n;i++){
cut.insert({keys[i],values[i]});
}
for(string &s:dictionary){
string p=encrypt(s);
//如为 '#' 则说明 该 s 无法通过已有的keys转变为解密后的字符串
if(p[0]!='#') hj[p]++;
}
}
string encrypt(string word1) {
string s;
for(char &i:word1) {
//如果在cut 中找不到 字符对应 则返回 '#' 表示 未找到
if(cut.count(i))s+=cut[i];
else return "#";
}
return s;
}
int decrypt(string word2) { //逆向思考
return hj[word2];
}
};