TH60 凯撒密码

发布时间:2024年01月16日

描述

一段由凯撒密码加密过的密文,凯撒密码指的是将字符偏移一定的单位,例如若偏移量为2,则a替换为c,b替换为d,c替换为e,...,z替换为b。若加密nowcoder,则密文为pqyeqfgt。现在发现加密包括数字、大写字母、小写字母,即0-9、A-Z、a-z的排列顺序进行偏移,现在截获了对方的一段密文以及偏移量,给定一段密文str和偏移量d,求对应的明文。

示例1

输入:

"pqyeqfgt",2

返回值:

"nowcoder"

复制

示例2

输入:

"123ABCabc",3

返回值:

"yz0789XYZ"

备注:

1≤∣str∣≤1000,1≤d≤61,d为加密时的偏移量

为了解密凯撒密码,我们可以遍历密文中的每个字符,并根据偏移量d进行逆向偏移。考虑到字符包括数字、大写字母和小写字母,我们需要分别处理这三种情况。以下是一个基于Java的解决方案:

 

Java

import java.util.*;

public class Solution {
    public String decode (String str, int d) {
        StringBuilder plaintext = new StringBuilder();
        
        for (char c : str.toCharArray()) {
            if (Character.isDigit(c)) { // 数字字符
                plaintext.append((char)(((c - '0' - d + 10) % 10) + '0'));
            } else if (Character.isUpperCase(c)) { // 大写字母
                plaintext.append((char)(((c - 'A' - d + 26) % 26) + 'A'));
            } else if (Character.isLowerCase(c)) { // 小写字母
                plaintext.append((char)(((c - 'a' - d + 26) % 26) + 'a'));
            } else { // 非数字和字母字符,直接保留原样
                plaintext.append(c);
            }
        }

        return plaintext.toString();
    }
}

在这段代码中,我们首先创建了一个StringBuilder对象用于存储解密后的明文。然后遍历输入字符串str中的每个字符,判断其类型并执行相应的逆向偏移操作:对于数字字符(0-9),在ASCII码表上做逆向偏移;对于大写字母(A-Z)和小写字母(a-z),同样在各自的范围内进行逆向偏移。最后返回构建好的明文字符串。注意,这里我们对偏移结果取模以确保字符始终在有效范围内。非数字和字母字符则不做任何改变,直接添加到明文中。

文章来源:https://blog.csdn.net/weixin_43400865/article/details/135595095
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。