华为OD E卷(100分)31-敏感字段加密

前言

工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。

题目描述

给定一个由多个命令字组成的命令字符串:

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

解题思路

遍历字符串:

当遇到"_" ,且不在括号内时,为一个完整的指令;

当遇到 "" 时,判断是否引用结束;

题解

JAVA实现

java 复制代码
package huawei.e100;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
* @author arnold
* @date 2024年12月21日
* 敏感字段加密
*/
public class T31_MinGanZiDuanJiaMi {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			int index = sc.nextInt();
			sc.nextLine();
			String str = sc.nextLine();
			String res = run(str, index);
			System.out.println(res);
		}

	}
	
	static String run(String str, int index) {
		List<String> lcmds = new ArrayList<String>();
		boolean isInQuote = false;
		int start = 0; // 记录指令开始位置
		for (int i = 1; i < str.length(); i++) {
			if (str.charAt(i) == '"') {
				isInQuote = !isInQuote;
			}
			if(str.charAt(i) == '_' ){
				if (str.charAt(i-1) != '_' && !isInQuote) {
					lcmds.add(str.substring(start, i));
				}
			} else if(str.charAt(i) != '_' ) {
				if (str.charAt(i-1) == '_' && !isInQuote) {
					start = i;
				} else if (i == str.length() -1) { 
					lcmds.add(str.substring(start)); // 最后命令部分 从起始截取到最后
				}
			}
		}
		if (index < lcmds.size()) {
			lcmds.set(index, "******");
			return String.join("_", lcmds);
		} else {
			return "ERROR";
		}
	}

}
相关推荐
小许同学记录成长2 分钟前
原始 IQ 数据时频图生成
python·算法
小小测试开发6 分钟前
OpenAI 模型攻克离散几何 80 年难题:Erdős 单位距离猜想被 AI 证明
人工智能·算法·机器学习
moonsims7 分钟前
从“传感器融合”升级为“多机器人约束融合系统”-Factor Graph 多约束融合
人工智能·算法
Dfreedom.12 分钟前
模型剪枝完全指南:从理论到实践,打造高效深度学习模型
人工智能·算法·机器学习·剪枝·模型加速
无限码力24 分钟前
华为OD机试真题 新系统-等距二进制判断(C/C++/Py/Java/Js/Go)
华为od·华为od机考·华为od机试真题·华为od机试·华为od机试题库·华为od机试新系统真题
几司29 分钟前
OpenISP 模块拆解 · 第11讲:非局部均值降噪 (NLM)
人工智能·算法·均值算法·isp
MicroTech202530 分钟前
突破算力瓶颈,MLGO微算法科技筑牢量子测控与经典混合计算技术根基
科技·算法·量子计算
夏日听雨眠1 小时前
数据结构(堆排序,基数排序)
数据结构·算法
什仙1 小时前
Ansys Maxwell 默认求解器选择
人工智能·笔记·算法·基础·ansys·maxwell
weixin_307779131 小时前
基于Vosk与CTranslate2的实时语音识别翻译系统 —— 完整C++实现详解
人工智能·算法·自动化·语音识别·原型模式