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

示例1:

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

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

分析:
将三行分别存入三个 List 中,利用 contains 方法快速查找
有一个简单的但是不好优化的点,即”如何判断整个字符串都是同一行字母?”,有多种方法,小伙伴们可以试试不同方法噢

class Solution {
    public String[] findWords(String[] words) {
        List<Character> up = Arrays.asList('Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'q', 'w', 'e', 'r', 't',
                'y', 'u', 'i', 'o', 'p');
        List<Character> middle = Arrays.asList('A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'a', 's', 'd', 'f', 'g',
                'h', 'j', 'k', 'l');
        List<Character> down = Arrays.asList('Z', 'X', 'C', 'V', 'B', 'N', 'M', 'z', 'x', 'c', 'v', 'b', 'n', 'm');
        List<String> ans = new ArrayList<>();
        for (String s : words) {
            int flag = 0;
            for (Character c : s.toCharArray()) {
                if (up.contains(c))
                    flag += 2;
                else if (middle.contains(c))
                    flag += 3;
                else if (down.contains(c))
                    flag += 5;
            }
            if (flag / 2.0 == s.length() || flag / 3.0 == s.length() || flag / 5.0 == s.length())
                ans.add(s);
        }
        return ans.toArray(new String[ans.size()]);
    }
}