华为OD机试E卷 - 敏感字段加密(Java
题目描述
给定一个由多个命令字组成的命令字符串:
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
(从0开始计数)和命令字符串S
。 - 查找命令字符串
S
中第K
个命令字,将其替换为******
(6个*
)。 - 去除处理后字符串中每个命令字前后的多余下划线
_
。 - 如果找不到指定索引的命令字,则输出字符串
"ERROR"
。
示例解释
示例1
输入:
1
password__a12345678_timeout_100
输出:
password_******_timeout_100
解释:
- 第
1
个命令字是a12345678
,用******
替换。 - 处理后字符串为
password_******_timeout_100
。
示例2
输入:
2
aaa_password_"a12_45678"_timeout__100_""_
输出:
aaa_password_******_timeout_100_""
解释:
- 第
2
个命令字是"a12_45678"
,用******
替换。 - 删除处理后的字符串中每个命令字前后的多余下划线
_
。 - 结果为
aaa_password_******_timeout_100_""
。
思路
-
初始化变量:
- 定义一个空字符串
command
来存储当前正在解析的命令字。 - 定义一个列表
commandList
来存储解析后的命令字列表。
- 定义一个空字符串
-
遍历字符数组并处理每个字符:
- a. 如果当前字符是双引号且
command
中已经包含一个双引号:- 将双引号添加到
command
中。 - 将解析完毕的命令字添加到
commandList
中,然后重置command
。
- 将双引号添加到
- b. 如果
command
不包含双引号且当前字符是下划线:- 检查
command
是否为空,如果不为空:- 将解析完毕的命令字添加到
commandList
中,然后重置command
。
- 将解析完毕的命令字添加到
- 检查
- c. 如果已经到达字符串末尾:
- 将当前字符添加到
command
中。 - 将解析完毕的命令字添加到
commandList
中,然后重置command
。
- 将当前字符添加到
- d. 否则,将当前字符添加到
command
中。
- a. 如果当前字符是双引号且
-
检查命令字索引
K
是否超出范围:- 如果超出范围,输出
"ERROR"
。
- 如果超出范围,输出
-
否则:
-
将指
-
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
机试E卷D卷刷题日记 文章被收录于专栏
机试刷题记录