# 键盘行

给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。

 

American keyboard

 

示例:

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

# 解(1):

var findWords = function (words) {
    var lines = ["qwertyuiop", "asdfghjkl", "zxcvbnm"];
    //检测一个单词是不是符合条件
    checkOne = function (dd) {
        var p = 0;
        //根据该单词第一个字符判断该单词属于哪一行的按键
        for (var i = 0; i < lines.length; i++) {
            if (lines[i].indexOf(dd[0]) != -1) {
                p = i;
            }
        }
        //判断后面的字符是否都属于该行
        for (var i = 0; i < dd.length; i++) {
            if (lines[p].indexOf(dd[i]) == -1) {
                return false;
            }
        }
        return true;
    }
    var result = [];
    for (var i = 0; i < words.length; i++) {
        //将字符统一调整为小写,便于处理
        var mm = words[i].toLowerCase();
        //判断成功时,将原单词压入数组
        if (checkOne(mm)) {
            result.push(words[i]);
        }
    }
    return result;

};

# 解(2):

var findWords = function (words) {
    const row1 = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p']
    const row2 = ["a", "s", "d", "f", "g", "h", "j", "k", "l"]
    const row3 = ["z", "x", "c", "v", "b", "n", "m"]
    const res = []
    for (let i = 0; i < words.length; i++) {
        const word = words[i]
        const headChar = word[0].toLowerCase()
        const matchRow = row1.includes(headChar) ? row1 : row2.includes(headChar) ? row2 : row3
        const isMatchAll = word.split("").every((val) => matchRow.includes(val.toLowerCase()))
        if (isMatchAll) res.push(word)
    }
    return res
}
Last Updated: 4/3/2020, 6:21:54 PM