leetcode 500题

Posted by franki on November 2, 2022

leetcode 500 键盘行

给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。

美式键盘 中:

第一行由字符 “qwertyuiop” 组成。 第二行由字符 “asdfghjkl” 组成。 第三行由字符 “zxcvbnm” 组成。

示例1

输入:words = ["Hello","Alaska","Dad","Peace"]
输出:["Alaska","Dad"]

示例2

输入:words = ["omk"]
输出:[]

思路

通过两层循环即可得到,当前 word 是否在键盘中的某一行都存在,如果存在,则放入结果,不在则继续寻找,直到遍历完毕,即可获取结果。

代码

/**
 * @param {string[]} words
 * @return {string[]}
 */
function containCharacters(word1, word2) {
    return word2.split('').every(w => word1.includes(w));
}

function findWords(words) {
    const rows = ['qwertyuiop', 'asdfghjkl', 'zxcvbnm'];
    const res = [];

    for (const s of words) {
        for (const row of rows) {
            if (containCharacters(row, s.toLowerCase())) {
                res.push(s);
                break;
            }
        }
    }

    return res;
}

复杂度分析:

  • 时间复杂度: O(N^2)
  • 空间复杂度:O(N)