题解 | #字符串加密#查重表方法
字符串加密
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;
}
安克创新 Anker公司福利 659人发布
