500. Keyboard Row 链接 题意 思路 代码

500. Keyboard Row

题意

给定一个单词数组,返回那些能仅用键盘上一行字母构成的单词
注意:

  1. 可以重复使用字母
  2. 忽略大小写(全部视为小写)

思路

将每行字母各自存放到一个数组里面,然后分别遍历,用HashMap为三组字母放入不同的key值,以此来区分某个字母属于键盘上的哪一行。
然后对给定单词数组进行遍历,只需拿到每个单词的首字母,然后用后面的字母一一与首字母进行比较,判断map的value值是否相等即可。
若全部相等,则说明该单词符合条件。

代码

Java:

public class Solution {
    public String[] findWords(String[] words) {
        String arr1[] = {"q", "w", "e", "r", "t", "y", "u", "i", "o", "p"};
        String arr2[] = {"a", "s", "d", "f", "g", "h", "j", "k", "l"};
        String arr3[] = {"z", "x", "c", "v", "b", "n", "m"};
        HashMap map = new HashMap();
        ArrayList list = new ArrayList();
        for (int i = 0; i < 10; i++) {
            map.put(arr1[i], 1);
        }
        for (int i = 0; i < 9; i++) {
            map.put(arr2[i], 2);
        }
        for (int i = 0; i < 7; i++) {
            map.put(arr3[i], 3);
        }

        for (int i = 0; i < words.length; i++) {
            boolean flag = true;
            for (int j = 0; j < words[i].length(); j++) {
                if (map.get("" + words[i].toLowerCase().charAt(0)) != map.get("" + words[i].toLowerCase().charAt(j))) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                list.add(words[i]);
            }
        }
        String[] ans = new String[list.size()];
        return (String[]) list.toArray(ans);
    }
}