题目

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