package a_od_test;
import java.util.Arrays;
import java.util.Scanner;
/*
寻找关键钥匙
知识点亨符宰C:编程基础正则表达式^序
时间限制:1s空间限制:256MB限走语言:不限
题目描述:
小强正在参加《童室逃生》游戏,当前关卡要求找到符合给定麼码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
示例1
输入:
abc
s.sdf134 A2c4b
输出:
2
说明:
第2个箱子中的Abc符合密码abc
示例2
输入:
abc
s.sdf134 A2c4bd 523[]
输出:
-1
说明:
第2个箱子中的Abcd,与密码不完全匹配,不符合要求
解题思牆:
1 将箱子中的字符串迸行遍历,找出其中的所有字母,井把大写转化为小写
2. 将步骤1的宇符串转化为数组进行升序排序,再转化为字符串
3. 将key和步骤2中的字符串逬行比较,如果相等则符合要求
*/
public class Main38 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line1 = sc.nextLine().toLowerCase();
String[] split = sc.nextLine().split(" ");
String[] split1 = line1.split("");
Arrays.sort(split1);
int result = -1;
for (int i = 0; i < split.length; i++) {
String word = split[i];
StringBuilder sb = new StringBuilder();
for (int j = 0; j < word.length(); j++) {
char cur = word.charAt(j);
if (Character.isLetter(cur)) {
sb.append(cur);
}
}
String[] split2 = sb.toString().toLowerCase().split("");
Arrays.sort(split2);
if (Arrays.equals(split1, split2)) {
result = i + 1;
}
}
System.out.println(result);
}
}
华为OD机试: 38 寻找关键钥匙
最新推荐文章于 2025-02-07 11:15:00 发布