题目
给定一段由凯撒密码加密过的密文 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; } };