leetcode 算法题500 (简单126) 键盘行

leetcode 算法题500 (简单126) 键盘行

  • 题目介绍
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
  • 示例

输入: [“Hello”, “Alaska”, “Dad”, “Peace”]
输出: [“Alaska”, “Dad”]

  • 注意

你可以重复使用键盘上同一字符。
你可以假设输入的字符串将只包含字母。

  • 解法一
/**
 * @param {string[]} words
 * @return {string[]}
 */
var findWords = function(words) {
  let line1 = 'qwertyuiop', line2 = 'asdfghjkl', line3 = 'zxcvbnm', map = {}, i = 0, temp = [];
  line1.split('').forEach(v => map[v] = 1);
  line2.split('').forEach(v => map[v] = 2);
  line3.split('').forEach(v => map[v] = 3);
  while(i < words.length) {
    let j = 0, flag = true;;
    while(j < words[i].length - 1) {
      if(map[words[i][j].toLocaleLowerCase()] !== map[words[i][++j].toLocaleLowerCase()]) {
        flag = false;
        break;
      }
    }
    if(flag) {
      temp.push(words[i]);
    }
    i++;
  }
  return temp;
};

执行用时 : 68 ms, 在所有 JavaScript 提交中击败了90.95%的用户

内存消耗 : 34.2 MB, 在所有 JavaScript 提交中击败了5.97%的用户

  • 解法二

/**
 * @param {string[]} words
 * @return {string[]}
 */
var findWords = function(words) {
  let line1 = new Set('qwertyuiop'), line2 = new Set('asdfghjkl'), line3 = new Set('zxcvbnm'), i = 0, temp = [];
  while (i < words.length) {
    let word = words[i++];
    if(new Set(word.toLowerCase() + 'qwertyuiop').size === line1.size || 
    new Set(word.toLowerCase() + 'asdfghjkl').size === line2.size ||
    new Set(word.toLowerCase() + 'zxcvbnm').size === line3.size
    ) {
      temp.push(word); 
    } 
  }
  return temp;
};

执行用时 : 60 ms, 在所有 JavaScript 提交中击败了100.00%的用户

内存消耗 : 34.2 MB, 在所有 JavaScript 提交中击败了5.97%的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值