密码解密 - 华为OD统一考试(C卷)
OD统一考试(C卷)
分值: 100分
题解: Java / Python / C++
题目描述
给定一段 “密文”字符串 s
,其中字符都是经过 “密码本” 映射的,现需要将“密文”解密并且输出。
映射的规则:
- (
a
−i
) 分别用(1
−9
)表示; - (
j
−z
) 分别用(10∗
−26∗
)表示。
约束:映射始终唯一。
输入描述
“密文”字符串
输出描述
明文字符串
示例1
输入:
20*19*20*
输出:
tst
说明:
翻译后的文本长度在 100 以内。
题解
基本思路是从密文字符串的末尾开始遍历,根据规则进行解密,并最终输出解密后的明文字符串。
关键点:
- 对于包含 '*' 的情况,解析前两个字符,进行相应的解密操作。
- 对于不包含 '*' 的情况,进行简单的解密操作。
- 在遍历过程中,逐步构建解密后的密码。
- 最后,反转密码字符串,因为是从末尾开始遍历的。
Java
import java.util.Scanner;
/**
* @author code5bug
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 读取输入文本
String text = in.next();
// 存储解密后的密码
StringBuilder pwd = new StringBuilder();
for (int i = text.length() - 1; i >= 0; ) {
if (text.charAt(i) == '*') {
char c = (char) (Integer.parseInt(text.substring(i - 2, i)) - 10 + 'j');
pwd.append(c);
i -= 3;
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024华为OD机试真题题解 文章被收录于专栏
华为OD机考(C卷、D卷)算法题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答