题目
给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
美式键盘 中:
第一行由字符 “qwertyuiop” 组成。
第二行由字符 “asdfghjkl” 组成。
第三行由字符 “zxcvbnm” 组成。
思路
先将键盘上的三行字母进行打表分类,依次检查 wordswords 中的单词中的每个字符是否都属于同一编号,若属于同一编号,则将其单词加入答案。
代码
class Solution {
static String[] ss = new String[]{"qwertyuiop", "asdfghjkl", "zxcvbnm"};
static int[] hash = new int[26];
static {
for (int i = 0; i < ss.length; i++) {
for (char c : ss[i].toCharArray()) hash[c - 'a'] = i;
}
}
public String[] findWords(String[] words) {
List<String> list = new ArrayList<>();
out:for(String w : words){
int t=-1;
for(char c:w.toCharArray()){
c=Character.toLowerCase(c);
if(t==-1)t=hash[c-'a'];
else if(t!=hash[c-'a'])continue out;
}
list.add(w);
}
return list.toArray(new String[list.size()]);
}
}