给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
示例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()]);
}
}