题目
给你一个字符串数组 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
|
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; };
|
知识点总结
字符与ASCll码互转:str为字符
- 字符➡ASCll码:String.fromChartCode(Number);
- ASCll码➡字符:str.chartCodeAt();
- 判断字符串中是否包含某一字符