给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
美式键盘 中:
第一行由字符 "qwertyuiop" 组成。
第二行由字符 "asdfghjkl" 组成。
第三行由字符 "zxcvbnm" 组成。
实现代码:
class Solution {
private static int[] chars = new int[26];
static {
// 整理26个字母分别每一行对应1、2、3
set("qwertyuiop", 1);
set("asdfghjkl", 2);
set("zxcvbnm", 3);
}
public String[] findWords(String[] words) {
List<String> ans = new ArrayList<>();
for (String word : words) {
if (check(word)) {
ans.add(word);
}
}
return ans.toArray(new String[ans.size()]);
}
private static void set(String s, int value) {
for (int i = 0; i < s.length(); i++) {
chars[index(s.charAt(i))] = value;
}
}
private static int index(char c) {
if (c >= 'A' && c <= 'Z') {
return c - 'A';
} else {
return c - 'a';
}
}
private static boolean check(String s) {
if (s.isEmpty()) {
return true;
}
int val = chars[index(s.charAt(0))];
for (int i = 1; i < s.length(); i++) {
if (chars[index(s.charAt(i))] != val) {
return false;
}
}
return true;
}
}