一、题目描述
小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成)的箱子,并给出箱子编号,箱子编号为1~N。
每个箱子中都有一个字符串s,字符串由大写字母,小写字母,数字,标点符号,空格组成,需要在这些字符串中找出所有的字母,忽略大小写后排列出对应的密码串,并返回匹配密码的箱子序号
提示:
满足条件的箱子不超过1个。
二、输入描述
第一行为key的字符串,第二行为箱子boxes,为数组样式,以空格分隔,箱子N数量满足1<=N<=10000,s长度满足 0<=s.length<=50,密码为仅包含小写字母的升序字符串,且不存在重复字母,密码K长度K.length,1<=K.length<=26。
三、输出描述
返回对应箱子编号。
如不存在符合要求的密码箱,则返回-1
四、补充说明
箱子中字符拼出的字符串与密码的匹配忽略大小写,且要求与密码完全匹配,如密码abc匹配aBc,但是密码abc不匹配abcd
五、解题思路
- 首先读取输入的密码字符串 line1 和箱子数组 boxArr;
- 初始化变量 result 为 -1,用于记录匹配密码的箱子序号,默认为不存在符合要求的密码箱;
- 使用循环遍历每个箱子:
- 初始化一个字符串构建器 builder 用于存储箱子中的字母;
- 遍历箱子中的每个字符:
- 将当前字符转换为小写字母;
- 如果转换后的字符是小写字母,则将其添加到字符串构建器中;
- 将字符串构建器转换为字符数组,并对字符数组进行排序;
- 将排序后的字符数组转换为字符串 temp;
- 如果 temp 与密码字符串 line1 相等,则说明找到了符合要求的密码箱,将 result 设置为当前箱子的序号,然后跳出循环;
- 输出 result,即为对应的箱子编号;
- 如果循环结束后仍然没有找到符合要求的密码箱,则输出 -1 表示不存在;
六、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line1 = sc.nextLine();
String line2 = sc.nextLine();
String[] boxArr = line2.split(" ");
int result = -1;
for (int i = 0; i < boxArr.length; i++) {
StringBuilder builder = new StringBuilder();
String box = boxArr[i];
for (int j = 0; j < box.length(); j++) {
char current = box.charAt(j);
char lower = Character.toLowerCase(current);
if (lower >= 'a' && lower <= 'z') {
builder.append(lower);
}
}
char[] arr = builder.toString().toCharArray();
Arrays.sort(arr);
String temp = String.valueOf(arr);
if (temp.equals(line1)) {
result = i + 1;
break;
}
}
System.out.println(result);
}
七、效果展示
1、输入
abq
nezha study A2q4b
2、输出
3
3、说明
第3个箱子中的abq,符合密码abq。
🏆下一篇:华为OD机试真题 Java 实现【基站维修工程师】【2023Q1 200分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。