Leetcode#500. Keyboard Row(键盘行)

题目描述

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

示例1:

输入: ["Hello", "Alaska", "Dad", "Peace"]
输出: ["Alaska", "Dad"]

注意:

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

思路

把键盘中的字母和其所在行数放到map中,然后比较一个字符串中是否都来自一行。

代码实现

package HashTable;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 500. Keyboard Row(键盘行)
 * 给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。
 */
public class Solution500 {
    public static void main(String[] args) {
        Solution500 solution500 = new Solution500();
        String[] words = {"Hello", "Alaska", "Dad", "Peace"};
        solution500.findWords(words);
    }

    /**
     * 把键盘中的字母和其所在行数放到map中
     *
     * @param words
     * @return
     */
    public String[] findWords(String[] words) {
        String[] keyboard = {"QWERTYUIOP", "ASDFGHJKL", "ZXCVBNM"};
        List<String> res = new ArrayList<>();
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < keyboard.length; i++) {
            for (char c : keyboard[i].toCharArray()) {
                map.put(c, i);
            }
        }
        int index;
        for (String word :
                words) {
            index = map.get(word.toUpperCase().toCharArray()[0]);
            for (char c :
                    word.toUpperCase().toCharArray()) {
                if (map.get(c) != index) {
                    index = -1;
                    break;
                }
            }
            if (index != -1) {
                res.add(word);
            }
        }
        return res.toArray(new String[res.size()]);
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小灰灰

JDK容器学习之LinkedList:底层存储&读写逻辑

LinkedList的底层结构及读写逻辑 链表容器,通常适用于频繁的新增删除,遍历的方式访问数据元素的场景 LinkedList 底层数据结构为链表,非线程安...

2008
来自专栏LinkedBear的个人空间

唠唠SE的集合-05——LinkedList 原

由于LinkedList:每一个元素在内存中的地址不连续,需要让上一个元素记住下一个元素。

851
来自专栏不想当开发的产品不是好测试

java array to list

背景 想把数组转为list,使用list的判断元素是否存在的方法,结果发现一个坑,int类型的数组失败了  步骤 public static void main...

2035
来自专栏JavaEdge

"聊胜于无",浅析Java中的原子操作Java的指针Unsafe类i++不是线程安全的1 原子更新基本类型类2 原子更新数组3 AtomicReference(原子更新引用)4 原子更新字段Atomi

6486
来自专栏魂祭心

原 Promise 实现

2945
来自专栏移动开发

Arrays.asList java.lang.UnsupportedOperationException 异常

但是有一小点注意,不能对该方法返回的list进行增删操作,因为该方法返回的是Arrays的内部类 Arrays.asList源码:

992
来自专栏haifeiWu与他朋友们的专栏

死磕Java之聊聊LinkedList源码(基于JDK1.8)

我们主要看研究一下下面的几个方法,LinkedList其他方法都是通过调用这几个方法来实现功能,包括LinkedList的双端队列的方法也是。

1334
来自专栏DHUtoBUAA

《剑指Offer》附加题_用两个队列实现一个栈_C++版

  在《剑指Offer》中,在栈和队列习题中,作者留下来一道题目供读者自己实现,即“用两个队列实现一个栈”。   在计算机数据结构中,栈的特点是后进先出,即最后...

3115
来自专栏一枝花算不算浪漫

一道笔试题来理顺Java中的值传递和引用传递

38311
来自专栏LinkedBear的个人空间

设计模式笔记(五)——代理模式 原

通过实现一个与被代理对象的类相同的接口,完成被代理对象的实际方法调用。(接口性多态)

763

扫码关注云+社区

领取腾讯云代金券