所有题目均有五种语言实现。C实现目录、C++ 实现目录、Python实现目录、Java实现目录、JavaScript实现目录
题目
给定一个由多个命令字组成的命令字符串:
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:本质上还是一个字符串处理的题目。用下划线分割后,然后将第 k 个 改为 ****** 然后再拼回去。 但是,也有一些 value中包含下划线,但是可能又会被 “”包围起来。
2:代码思路
解析命令字符串:
- 由于命令字可能被下划线
_
分隔,且双引号""
可以用于包含特殊命令字(如带_
的命令字或空命令字),我们需要正确解析字符串。提取命令字:
- 使用遍历的方法,按字符逐步解析,注意双引号的特殊处理:
- 如果遇到 双引号
" "
,说明接下来是一个完整的命令字,直到下一个双引号结束。- 如果是普通字符,读取直到下一个
_
结束。修改指定索引的命令字:
- 如果索引 K 合法,用
"******"
替换相应命令字;- 如果索引超出范围,返回
"ERROR"
。输出处理后的字符串:
- 需要确保不会因为
_
过多导致错误。- 保证命令字之间仍然用
_
分隔,不多不少。
考点
1:字符串处理
Code
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int k = Integer.parseInt(sc.nextLine());
String s = sc.nextLine();
System.out.println(parseCommands(k, s));
}
public static String parseCommands(int k, String s) {
List<String> commands = new ArrayList<>();
int n = s.length();
int i = 0;
while (i < n) {
// 处理被双引号包裹的命令
if (s.charAt(i) == '"') {
int j = i + 1;
while (j < n && s.charAt(j) != '"') {
j++;
}
if (j < n) {
commands.add(s.substring(i, j + 1)); // 包括引号
i = j + 1;
} else {
break; // 格式异常
}
} else if (s.charAt(i) == '_') {
i++; // 跳过连续下划线
} else {
int j = i;
while (j < n && s.charAt(j) != '_') {
j++;
}
commands.add(s.substring(i, j));
i = j;
}
}
// 去掉空串,保留合法空命令字 ""
List<String> cleaned = new ArrayList<>();
for (String cmd : commands) {
if (!cmd.isEmpty() || cmd.equals("\"\"")) {
cleaned.add(cmd);
}
}
if (k >= cleaned.size()) {
return "ERROR";
}
cleaned.set(k, "******");
return String.join("_", cleaned);
}
}
要求
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
语言限定:
C(clang11), C++(clang++11), Pascal(fpc 3.0.2), Java(javac 1.8), Python2(2.7.3),
PHP(7.4.7), C#(mcs5.4), ObjC(gcc 5.4), Pythen3(3.9), JavaScript Node(12.18.2), JavaScript V8(6.0.0),
Sqlite(3.7.9), R(4.0.3), Go(1.14.4), Ruby(2.7.1), Swift(5.3), matlab(Octave 5.2), Pypy2(pypy2.7.13),
Pypy3(pypy3.6.1), Rust(1.44), Scala(2.11.12), Kotlin(1.4.10), Groovy(3.0.6), TypeScript(4.1.2), Mysql(8.0)
更多题目链接:
华为OD 2025 最新最全机试题库及讲解,A+B+C+D+E卷题库大全。
Java题库: 2024华为OD机试(JAVA)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od机试真题-CSDN博客
Python题库: 2024华为OD机试(Python)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od机试好过吗-CSDN博客
C++题库: 2024华为OD机试(C++)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od怎么知道考的是a卷还是b卷-CSDN博客
Js题库: 2024 华为OD机试(JavaScript)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od 2023 q2b卷-CSDN博客