500. Keyboard Row
1、LeetCode上的简单题,写了好半天,代码还比较多,刚学,能过就满意了;
2、整体思路(待会儿写):
1 <script> 2 // arr=["Hello", "Alaska", "Dad", "Peace"] 3 var findWords = (words) => { 4 // 把所有字母放在一个字符串中,利用index值 5 // 0-9 表示键盘上第一行字母,即:q --->p 6 // 10-18 表示键盘上第二行字母,即:a --->l 7 // 19-25 表示键盘上第二行字母,即:z --->m 8 let rowArr = "qwertyuiopasdfghjklzxcvbnm"; 9 // 定义一个空数组,接收符合条件的元素 10 let resArr = []; 11 // 定义一个标志位,true表示符合条件,false表示不符合 12 let flag = null; 13 // 第一次循环,遍历words数组中的每个元素 14 for (let i = 0; i < words.length; i++) { 15 //定义一个空数组,转换成小写的words数组 16 let arr = []; 17 //大写转小写 18 arr[i] = words[i].toLowerCase(); 19 // 判断第一个字母是否在0-9之间,在,则表示表示第一排字母 20 if (rowArr.indexOf(arr[i][0]) < 10) { 21 // flag复位,因为每处理完一次words中的一个元素后,flag的值会发生变化,所以每次进到一个if中需要复位到true 22 flag = true; 23 // 遍历words[i]中的每个字母 24 for (let j = 0; j < arr[i].length; j++) { 25 if (rowArr.indexOf(arr[i][j]) >= 10) { 26 flag = false 27 break; 28 } 29 } 30 } 31 32 // 判断第一个字母是否在9-18之间,在,则表示表示第二排字母 33 if (rowArr.indexOf(arr[i][0]) >= 10 && rowArr.indexOf(arr[i][0]) <= 18) { 34 flag = true; 35 for (let j = 0; j < arr[i].length; j++) { 36 if (rowArr.indexOf(arr[i][j]) <= 9 || rowArr.indexOf(arr[i][j]) >= 19) { 37 flag = false; 38 break; 39 } 40 } 41 } 42 43 // 判断第一个字母是否在18-25之间,在,则表示表示第三排字母 44 if (rowArr.indexOf(arr[i][0]) >= 19) { 45 flag = true; 46 for (let j = 0; j < arr[i].length; j++) { 47 if (rowArr.indexOf(arr[i][j]) <= 18) { 48 flag = false; 49 break; 50 } 51 } 52 } 53 if (flag) { 54 resArr.push(words[i]) 55 } 56 } 57 return resArr 58 } 59 60 console.log(findWords(["Hello", "Alaska", "Dad", "Peace"])); 61 </script>