华为OD机试真题 JavaScript 实现【猜字谜】【2023Q1 100分】,附详细解题思路-LMLPHP

一、题目描述

小王设计了一人简单的清字谈游戏,游戏的迷面是一人错误的单词,比如nesw,玩家需要猜出谈底库中正确的单词。猜中的要求如·
对于某个谜面和谜底单词,满足下面任一条件都表示猜中:

  1. 变换顺序以后一样的,比如通过变换w和e的顺序,“nwes”跟“news”是可以完全对应的;
  2. 字母去重以后是一样的,比如“woood”和“wood”是一样的,它们去重后都是“wod”请你写一个程序帮忙在谜底库中找到正确的谜底。迷面是多个单词,都需要找到对应的谜底,如果找不到的话,返"not found"。

二、输入描述

1、谜面单词列表,以",“分隔
2、谜底库单词列表,以”,"分隔

三、输出描述

匹配到的正确单词列表,以","分隔;

如果找不到,返回"not found"。

补充说明:

  1. 单词的数量N的范围:0<N<1000
  2. 词汇表的数量M的范围:0<M<1000
  3. 单词的长度P的范围:0<P<20
  4. 输入的字符只有小写英文字母,没有其它字符

四、解题思路

  1. 首先,读取输入的迷面单词列表和谜底库单词列表;
  2. 将谜底库单词列表中的每个单词转换为字节数组,并将其存储在一个字节数组列表wordsList中;
  3. 遍历迷面单词列表中的每个单词,对于每个迷面单词,遍历谜底库单词列表中的每个单词;
  4. 将当前迷面单词和谜底库单词转换为字节数组,然后逐个比较字节数组中的字符;
  5. 如果迷面单词的每个字符在谜底库单词中都能找到匹配的字符,说明满足条件,将对应的谜底单词添加到结果列表result中;
  6. 如果遍历完所有谜底库单词后仍未找到匹配的谜底单词,则将"not found"添加到结果列表result中;
  7. 如果结果列表result为空,说明没有找到匹配的谜底单词,输出"not found";
  8. 否则,将结果列表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 实现【猜字谜】【2023Q1 100分】,附详细解题思路-LMLPHP


🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

华为OD机试真题 JavaScript 实现【猜字谜】【2023Q1 100分】,附详细解题思路-LMLPHP

07-04 15:23