✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)
文章目录
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. Java算法源码
- 5. 测试
- 6.解题思路
1. 题目描述
小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成)的箱子,并给出箱子编号,箱子编号为1~N。
每个箱子中都有一个字符串s,字符串由大写字母,小写字母,数字,标点符号,空格组成,需要在这些字符串中找出所有的字母,忽略大小写后排列出对应的密码串,并返回匹配密码的箱子序号
提示:
满足条件的箱子不超过1个。
2. 输入描述
第一行为key的字符串,第二行为箱子boxes,为数组样式,以空格分隔,箱子N数量满足1<=N<=10000,s长度满足 0<=s.length<=50,密码为仅包含小写字母的升序字符串,且不存在重复字母,密码K长度K.length,1<=K.length<=26。
3. 输出描述
返回对应箱子编号。
如不存在符合要求的密码箱,则返回-1
补充说明
箱子中字符拼出的字符串与密码的匹配忽略大小写,且要求与密码完全匹配,如密码abc匹配aBc,但是密码abc不匹配abcd
4. 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);
}
5. 测试
6.解题思路
- 首先读取输入的密码字符串
line1
和箱子数组boxArr
。 - 初始化变量
result
为 -1,用于记录匹配密码的箱子序号,默认为不存在符合要求的密码箱。 - 使用循环遍历每个箱子:
- 初始化一个字符串构建器
builder
用于存储箱子中的字母。 - 遍历箱子中的每个字符:
- 将当前字符转换为小写字母。
- 如果转换后的字符是小写字母,则将其添加到字符串构建器中。
- 将字符串构建器转换为字符数组,并对字符数组进行排序。
- 将排序后的字符数组转换为字符串
temp
。 - 如果
temp
与密码字符串line1
相等,则说明找到了符合要求的密码箱,将result
设置为当前箱子的序号,然后跳出循环。
- 初始化一个字符串构建器
- 输出
result
,即为对应的箱子编号。 - 如果循环结束后仍然没有找到符合要求的密码箱,则输出 -1 表示不存在。