题目

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

美式键盘中:

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

提示:

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

解题思路和代码

  • 创建三个字符串分别表示三行字符;
  • 判断字符串是否符合条件之前先对字符串进行大小写转换;
  • 对单个字符串进行遍历,遍历第一个字符给整个字符串添加标识;
  • 接下来的每次遍历查看是否都属于该标识所代表的字母,如果是继续遍历直至遍历完,反之将标识置为-1,然后跳过整个遍历过程。
  • 将标识不为-1的字符串保存在字符串中并返回。

代码

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
* @param {string[]} words
* @return {string[]}
*/
var findWords = function(words) {
let arr1 = 'qwertyuiop';
let arr2 = 'asdfghjkl';
let arr3 = 'zxcvbnm';
let result = [];
words.forEach((word,index)=>{
let flag = 0;
for(let i of word){
if(i.charCodeAt()<97){
i = String.fromCharCode(i.charCodeAt()+32);
}
if(arr1.indexOf(i)!=-1){
if(flag ==0){
flag = 1;
}else{
if(flag !=1){
flag =-1;
break;
}else{
continue
}
}
}else if(arr2.indexOf(i)!=-1){
if(flag ==0){
flag = 2;
}else{
if(flag !=2){
flag =-1;
break;
}else{
continue
}
}
}else{
if(flag ==0){
flag = 3;
}else{
if(flag !=3){
flag =-1;
break;
}else{
continue
}
}
}
}
if(flag!=-1){
result.push(word);
}
})
return result;
};

知识点总结