敏感字段加密 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集

华为od机试

题目描述

【敏感字段加密】给定一个由多个命令字组成的命令字符串:

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_""

题解

这道题主要考察字符串解析与处理,重点在于解析命令字符串,并正确处理带有双引号的命令字。题目的挑战在于,如何在复杂的命令字符串中正确识别命令字,同时处理下划线和双引号的特殊情况。

解题思路

  1. 解析字符串:
    • 我们需要根据题目要求,首先将字符串按照下划线进行分割,提取每一个命令字。
    • 下划线可以连续出现,意味着命令字之间可以有多个下划线,因此需要过滤掉多余的下划线。
    • 双引号包裹的命令字可以包含下划线,双引号内的部分应被视为一个完整的命令字,不能再进一步拆分。
  2. 处理敏感字段加密:
    • 解析完所有命令字后,根据输入的索引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++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答。

全部评论

相关推荐

华为 供应链 24-27w
点赞 评论 收藏
分享
华测导航 硬件测试工程师 n*16, 公积金全额7%, 餐补600-700 本科
点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务