题解 | #字符串加密#查重表方法
字符串加密
https://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
#include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; int main(){ //复杂度:Ot(K+P), Os(1); K-key size, P-plain size string key,plain; cin>>key>>plain; char keyTable[26]={'a'}; //密钥对照表 bool isInKeyTable[26]={false}; //查重表,用来查一个字符是否已经在密钥对照表中 int keyIndex=0; //密钥中,去重之后已经存入密钥对照表的长度 for(int i=0;i<key.size();i++) //遍历密钥 if(!isInKeyTable[key[i]-'a']) //去重:若当前字符在查重表中对应值为假(不在密钥对照表中) { keyTable[keyIndex++]=key[i]; //则加入密钥对照表 isInKeyTable[key[i]-'a']=true; //且在查重表中标为真 } for(int i=0;i<26;i++) //遍历26个字母 if(!isInKeyTable[i]) //若该字母不在密钥对照表中 keyTable[keyIndex++]=i+'a'; //则存入密钥对照表keyIndex以后的位置 for(int i=0;i<plain.size();i++) //遍历明文 cout<<keyTable[plain[i]-'a']; //直接对照输出 return 0; }