📜  门| GATE-CS-2016(套装1)|问题 19(1)

📅  最后修改于: 2023-12-03 15:12:43.360000             🧑  作者: Mango

题目19:字符串加密

题目描述

有一种字符串加密算法,它将字符串中每个字符按照字母表顺序向后移动三位,即'a'变为'd','z'变为'c'。现给定一个加密后的字符串,请你输出解密后的原字符串。

输入格式

输入一行,为经过加密的字符串。

输出格式

输出一行,为解密后的原字符串。

样例输入
dwwdfn
样例输出
attack
解题思路

一个字符向后移动三位,假设字符为ch,则解密后的字符为:

char decrypted_ch = (ch - 'a' + 23) % 26 + 'a';

需要注意的是,当 ch > 'z' 时,需要减去26,否则会得到不正确的结果。

代码实现
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String encryptedString = scanner.nextLine();
        char[] chars = encryptedString.toCharArray();

        for (int i = 0; i < chars.length; i++) {
            char encryptedChar = chars[i];
            char decryptedChar = (char) ((encryptedChar - 'a' + 23) % 26 + 'a');
            System.out.print(decryptedChar);
        }
    }
}
复杂度分析

时间复杂度:O(n),其中n为字符串的长度。

空间复杂度:O(n),在java中,字符串和字符数组都占据O(n)的空间。

总结

本题考察了对加密与解密的基本概念以及ASCII字符集的运用,算法思路简单,实现也不困难。