题目
给定一段由凯撒密码加密过的密文 str 和偏移量 d,求对应的明文。
凯撒密码指的是将字符偏移一定的单位,例如若偏移量为2,则a替换为c,b替换为d,...,z替换为b。
加密包括数字、大写字母、小写字母,即 0-9、A-Z、a-z 的排列顺序进行偏移。
解题思路
按照题意写出加密顺序 order。
遍历字符串 str,对于其中的每个字符,求出它在 order 中的下标,再将该下标减去偏移量 d,将原字符转换成现在下标中的字符。
C++代码
class Solution {
public:
/**
* 解密密文
* @param str string字符串 密文
* @param d int整型 偏移量
* @return string字符串
*/
string decode(string str, int d) {
// write code here
string order = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int n = 62;
int index = 0;
for(int i=0; i<str.size(); ++i){
if(str[i]>='0' && str[i]<='9')
index = str[i] - '0';
else if(str[i]>='A' && str[i]<='Z')
index = 10 + (str[i] - 'A');
else
index = 36 + (str[i] - 'a');
index = (index + n - d) % n;
str[i] = order[index];
}
return str;
}
}; 
京公网安备 11010502036488号