敏感字段加密 - 华为OD统一考试(E卷)
2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集
题目描述
【敏感字段加密】给定一个由多个命令字组成的命令字符串:
1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号; 2、命令字之间以一个或多个下划线 进行分割; 3、可以通过两个双引号""来标识包含下划线 的命令字或空命令字(仅包含两个双引号的命令字),双引号不会在命令字内部出现;请对指定索引的敏感字段进行加密,替换为******
(6个*),并删除命令字前后多余的下划线_。如果无法找到指定索引的命令字,输出字符串ERROR.
输入描述
输入为两行,第一行为命令字索引K(从0开始),第二行为命令字符串S。
输出描述
输出处理后的命令字符串,如果无法找到指定索引的命令字,输出字符串ERROR。
示例1
输入:
1
password__a12345678_timeout_100
输出:
password_******_timeout_100
示例2
输入:
2
aaa_password_"a12_45678"_timeout__100_""_
输出:
aaa_password_******_timeout_100_""
题解
这道题主要考察字符串解析与处理,重点在于解析命令字符串,并正确处理带有双引号的命令字。题目的挑战在于,如何在复杂的命令字符串中正确识别命令字,同时处理下划线和双引号的特殊情况。
解题思路
- 解析字符串:
- 我们需要根据题目要求,首先将字符串按照下划线进行分割,提取每一个命令字。
- 下划线可以连续出现,意味着命令字之间可以有多个下划线,因此需要过滤掉多余的下划线。
- 双引号包裹的命令字可以包含下划线,双引号内的部分应被视为一个完整的命令字,不能再进一步拆分。
- 处理敏感字段加密:
- 解析完所有命令字后,根据输入的索引
K
,检查命令字是否存在。如果存在,则将对应命令字替换为******
。如果不存在,则返回“ERROR”。- 最终将解析后的命令字重新组合成一个以单下划线分隔的字符串,并输出结果。
Java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @author code5bug
*/
public class Main {
public static List<String> parse(String s) {
List<String> tokens = new ArrayList<>();
int i = 0, n = s.length();
while (i < n) {
// 一个或多个下划线分割
while (i < n && s.charAt(i) == '_') i++;
if (i == n) break;
StringBuilder sb = new StringBuilder();
if (s.charAt(i) == '"') { // 双引号表示字符串
sb.append(s.charAt(i++));
while (i < n && s.charAt(i) != '"') sb.append(s.charAt(i++));
sb.append(s.charAt(i++));
} else {
while (i < n && s.charAt(i) != '_') sb.append(s.charAt(i++));
}
tokens
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
华为OD机试题库题解2024 文章被收录于专栏
华为OD机考(CDE卷)题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答。