题解 | #凯撒密码#

凯撒密码

http://www.nowcoder.com/practice/38dc0834910b4cb9b29008ee3ebe42ce

题意整理:

凯撒密码既对原字符串进行字符移位得到新的字符串的简单加密算法,题目给出加密后的字符串和移动位数,要求算出原字符串。
下图简单描述的凯撒密码的加密算法
图片说明

方法一:构造字符串序列后移位计算

核心思想:

构造出一个表示序列的字符串,既构成的字符串,然后进行移位计算即可,需要对溢出进行处理,既小于d位置的字符移位d位后,不足部分从字符串尾端开始处理,既将序列视为循环序列

核心代码:

class Solution {
public:
    string decode(string str, int d) {
        string s;
        //构造字符串序列
        for(int i = 0; i <= 9; ++i) {
            s.push_back(i + '0');
        }
        for(int i = 0; i < 26; ++i) {
            s.push_back(i + 'A');
        }
        for(int i = 0; i < 26; ++i) {
            s.push_back(i + 'a');
        }
        for(char& w : str) {
            int p = s.find(w);
            w = d > p ? s[62 - d + p] : s[p - d];//如果超过字符串头部则不足部分从尾部获取
        }
        return str;
    }
};

复杂度分析:

时间复杂度:。其中n为密码序列长度,m为字符串序列长度,此处m固定为62.需要对每个密码字符处理,每次的函数开销为
空间复杂度:,m为字符串序列长度,此处m固定为62,既可以视为,其他部分使用的都是常数个变量

方法二:时间优化

核心思想:

方法一每次都需对密码字符位置和d进行比较后确定解密字符,这会增加时间开销。而这种判断是为了处理字符解码越过首字符的问题,所以可以通过双倍长的字符串序列解决,相当于是空间换时间的策略

核心代码:

class Solution {
public:
    string decode(string str, int d) {
        string s;
        //构造字符串序列
        for(int i = 0; i <= 9; ++i) {
            s.push_back(i + '0');
        }
        for(int i = 0; i < 26; ++i) {
            s.push_back(i + 'A');
        }
        for(int i = 0; i < 26; ++i) {
            s.push_back(i + 'a');
        }
        s += s;//双倍序列,无需处理越界
        for(char& w : str) {
            int p = s.find(w) + 62;//获取后半部位置
            w = s[p - d];
        }
        return str;
    }
};

复杂度分析:

时间复杂度:。其中n为密码序列长度,m为字符串序列长度的一半(因为必然在前半部找到所需字符),故此处m仍然固定为62.需要对每个密码字符处理,每次的函数开销为
空间复杂度:,m为字符串序列长度,此处m固定为124,既可以视为,其他部分使用的都是常数个变量

全部评论

相关推荐

hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
和蔼:在竞争中脱颖而出,厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务