持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
题目描述
原题链接 :
给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
美式键盘 中:
- 第一行由字符 "qwertyuiop" 组成。
- 第二行由字符 "asdfghjkl" 组成。
- 第三行由字符 "zxcvbnm" 组成。
示例 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] 由英文字母(小写和大写字母)组成
思路分析
- 先将数组转为字符串,利用字符串匹配模式来处理
- 整体思路利用字符串的replace()方法,第一个参数放入匹配键盘某一行字符的正则表达式,因为有三行,所以处理三次,当然这里需要注意,成功的关键就是看你正则写的对不对,正则写对了就可以匹配对应的字符。
- 主要实现利用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)