# 键盘行
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
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
}
← 496-下一个更大元素 506-相对名次 →