「每日LeetCode」2021年10月31日

本文最后更新于:2023年3月19日 晚上

Lt500. 键盘行

500. 键盘行

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

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

image.png

示例 1:
输入:words = [“Hello”,”Alaska”,”Dad”,”Peace”] 输出:[“Alaska”,”Dad”]
示例 2:
输入:words = [“omk”] 输出:[]
示例 3:
输入:words = [“adsdf”,”sfd”] 输出:[“adsdf”,”sfd”]

提示:

  • 1 <= words.length <= 20
  • 1 <= words[i].length <= 100
  • words[i] 由英文字母(小写和大写字母)组成

思路

map 记录对应字母所在的行,遍历每个单词,再遍历单词每个字符是否都在同一行即可。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
* @param {string[]} words
* @return {string[]}
*/
var findWords = function (words) {
const map = {
q: 1,
w: 1,
e: 1,
r: 1,
t: 1,
y: 1,
u: 1,
i: 1,
o: 1,
p: 1,
a: 2,
s: 2,
d: 2,
f: 2,
g: 2,
h: 2,
j: 2,
k: 2,
l: 2,
z: 3,
x: 3,
c: 3,
v: 3,
b: 3,
n: 3,
m: 3,
};
return words.filter((word) =>
word
.split("")
.every((char) => map[char.toLowerCase()] === map[word[0].toLowerCase()])
);
};