华为OD机试真题 Java 实现【猜字谜】【2023Q2】
一、题目描述
小王设计了一人简单的清字谈游戏,游戏的迷面是一人错误的单词,比如nesw,玩家需要猜出谈底库中正确的单词。猜中的要求如·
对于某个谜面和谜底单词,满足下面任一条件都表示猜中:
- 变换顺序以后一样的,比如通过变换w和e的顺序,“nwes”跟“news”是可以完全对应的;
- 字母去重以后是一样的,比如“woood”和“wood”是一样的,它们去重后都是“wod”请你写一个程序帮忙在谜底库中找到正确的谜底。迷面是多个单词,都需要找到对应的谜底,如果找不到的话,返"not found"。
二、输入描述
1、谜面单词列表,以",“分隔
2、谜底库单词列表,以”,"分隔
三、输出描述
匹配到的正确单词列表,以","分隔;
如果找不到,返回"not found"。
补充说明:
- 单词的数量N的范围:0<N<1000
- 词汇表的数量M的范围:0<M<1000
- 单词的长度P的范围:0<P<20
- 输入的字符只有小写英文字母,没有其它字符
四、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String values = sc.nextLine();
String[] arr = values.split(",");
values = sc.nextLine();
String[] strs = values.split(",");
List<byte[]> wordsList = new ArrayList<>();
List<String> result = new ArrayList<>();
for (String s : strs) {
wordsList.add(s.getBytes());
}
for (String s : arr) {
byte[] bytes = s.getBytes();
int ok = 0;
for (int i = 0; i < wordsList.size(); i++) {
byte[] wordChars = wordsList.get(i);
int has = 1;
for (byte e : bytes) {
int found = 0;
for (byte w : wordChars) {
if (w == e) {
found = 1;
break;
}
}
if (found == 0) {
has = 0;
break;
}
}
if (has == 1) {
if (!result.contains(strs[i])) {
result.add(strs[i]);
ok = 1;
break;
}
}
}
if (ok == 0) {
result.add("not found");
}
}
if (result.size() == 0) {
System.out.print("not found");
} else {
for (int i = 0; i < result.size(); i++) {
if (i == 0)
System.out.print(result.get(i));
else
System.out.print("," + result.get(i));
}
}
}
五、效果展示
1、输入
nezha study java
zhanee sdytu jav
2、输出
zhanee sdytu jav
3、说明
nezha == zhanee
study == study
java == jav
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。