力扣题解:键盘行

74 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

题目描述

原题链接 :

500. 键盘行 - 力扣(LeetCode)

给你一个字符串数组 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] 由英文字母(小写和大写字母)组成

思路分析

  1. 先将数组转为字符串,利用字符串匹配模式来处理
  2. 整体思路利用字符串的replace()方法,第一个参数放入匹配键盘某一行字符的正则表达式,因为有三行,所以处理三次,当然这里需要注意,成功的关键就是看你正则写的对不对,正则写对了就可以匹配对应的字符。
  3. 主要实现利用replace()这个函数的第二个参数传入一个函数,这个函数第一个参数就是匹配到的字符,想知道它其他参数请自行百度,如果匹配到了,就返回该字符,没匹配到就是undefined,根据是不是undefined,将匹配到的字符添加到数组里面,最后返回。

AC 代码

/**
 * @param {string[]} words
 * @return {string[]}
 */
var findWords = function(words) {
  let str=words.join()
  let arr=[]
  str.replace(/(\b[qwertyuiop]+\b)/gi,function(word){
    if(word!=undefined){
      arr.push(word)
    }
  })
  str.replace(/(\b[asdfghjkl]+\b)/gi,function(word){
    if(word!=undefined){
      arr.push(word)
    }
  })
  str.replace(/(\b[zxcvbnm]+\b)/gi,function(word){
    if(word!=undefined){
      arr.push(word)
    }
  })

  return arr
};

参考

借鉴他人写法,可以根据判断true or false 来确定该字符串是否存在于其中,如果存在就add最后转成数组即可。 - 键盘行 - 力扣(LeetCode)

【zljhero】【C语言】键盘行:判断字符是否在对应字符串内 - 键盘行 - 力扣(LeetCode)