一、题目描述
小王设计了一人简单的清字谈游戏,游戏的迷面是一人错误的单词,比如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
- 输入的字符只有小写英文字母,没有其它字符
四、解题思路
- 首先,读取输入的迷面单词列表和谜底库单词列表;
- 将谜底库单词列表中的每个单词转换为字节数组,并将其存储在一个字节数组列表wordsList中;
- 遍历迷面单词列表中的每个单词,对于每个迷面单词,遍历谜底库单词列表中的每个单词;
- 将当前迷面单词和谜底库单词转换为字节数组,然后逐个比较字节数组中的字符;
- 如果迷面单词的每个字符在谜底库单词中都能找到匹配的字符,说明满足条件,将对应的谜底单词添加到结果列表result中;
- 如果遍历完所有谜底库单词后仍未找到匹配的谜底单词,则将"not found"添加到结果列表result中;
- 如果结果列表result为空,说明没有找到匹配的谜底单词,输出"not found";
- 否则,将结果列表result中的单词按逗号分隔输出。
五、JavaScript算法源码
const readline = require("readline");
const read = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const lines = [];
read.on("line", (line) => {
lines.push(line);
if (lines.length === 2) {
const puzzles = lines[0].split(" ");
const words = lines[1].split(" ");
console.log(findCorrectWords(puzzles, words));
}
});
function findCorrectWords(puzzles, words) {
const wordsList = words.map((word) => word.split(''));
const result = [];
for (let i = 0; i < puzzles.length; i++) {
const puzzle = puzzles[i].split('');
let found = false;
for (let j = 0; j < wordsList.length; j++) {
const wordChars = wordsList[j];
let has = true;
for (let k = 0; k < puzzle.length; k++) {
if (!wordChars.includes(puzzle[k])) {
has = false;
break;
}
}
if (has) {
const matchedWord = words[j];
if (!result.includes(matchedWord)) {
result.push(matchedWord);
found = true;
break;
}
}
}
if (!found) {
result.push('not found');
}
}
if (result.length === 0) {
return 'not found';
} else {
return result.join(' ');
}
}
六、效果展示
1、输入
nezha study java
zhanee sdytu jav
2、输出
zhanee sdytu jav
3、说明
nezha == zhanee
study == study
java == jav
🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。