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

  • 👍 202
  • 👎 0
  • 凑合一个哈希表

    class Solution {
        public String[] findWords(String[] words) {
            String s1 = "qwertyuiopQWERTYUIOP";
            String s2 = "asdfghjklASDFGHJKL";
            String s3 = "zxcvbnmZXCVBNM";
            HashMap<Character,Integer> hashMap = new HashMap<>();
            for (int i = 0; i < s1.length(); i++) {
                hashMap.put(s1.charAt(i),1);
            }
            for (int i = 0; i < s2.length(); i++) {
                hashMap.put(s2.charAt(i),2);
            }
            for (int i = 0; i < s3.length(); i++) {
                hashMap.put(s3.charAt(i),3);
            }
            List<String> res = new ArrayList<>();
            for (String word : words) { ;
                if (word.length()==1){
                    res.add(word);
                    continue;
                }
                int i = 1;
                for (; i < word.length(); i++) {
                    if (!hashMap.get(word.charAt(i)).equals(hashMap.get(word.charAt(i - 1)))){
                        break;
                    }
                    if (i==word.length()-1){
                        res.add(word);
                    }
                }
    
            }
            return res.toArray(new String[0]);
        }
    }