解法一:
public class Solution {
public String[] findWords(String[] words) {
Set<Character> row1 = new HashSet<>();
Set<Character> row2 = new HashSet<>();
Set<Character> row3 = new HashSet<>();
row1.addAll(Arrays.asList('Q','W','E','R','T','Y','U','I','O','P'));
row2.addAll(Arrays.asList('A','S','D','F','G','H','J','K','L'));
row3.addAll(Arrays.asList('Z','X','C','V','B','N','M'));
int[] index = new int[words.length];//用index来判断是否满足条件,1代表满足条件,0代表不满足条件
int count = 0;//用于计数,判断满足条件的字符串个数
for(int i = 0; i < words.length; i++){
//先判断这个字符串的第一个字符,将其归到哪一行去,再判断,空字符串单独处理
if(words[i].length() == 0){
index[i] = 1;
} else{
String upper = words[i].toUpperCase();//统一换成大写形式
char c = upper.charAt(0);
if(row1.contains(c)){//这个字符串应该归第一行处理
boolean flag = true;
for(int j = 1; j < upper.length(); j++){
if(!row1.contains(upper.charAt(j))){
flag = false;
break;
}
}
if(flag){
index[i] = 1;
count++;
} else{
index[i] = 0;
}
} else if(row2.contains(c)){//这个字符串应该归第二行处理
boolean flag = true;
for(int j = 1; j < upper.length(); j++){
if(!row2.contains(upper.charAt(j))){
flag = false;
break;
}
}
if(flag){
index[i] = 1;
count++;
} else{
index[i] = 0;
}
} else{//这个字符串应该归第三行处理
boolean flag = true;
for(int j = 1; j < upper.length(); j++){
if(!row3.contains(upper.charAt(j))){
flag = false;
break;
}
}
if(flag){
index[i] = 1;
count++;
} else{
index[i] = 0;
}
}
}
}
String[] res = new String[count];
int move = 0;
for(int i = 0; i < index.length; i++){
if(index[i] == 1){
res[move++] = words[i];
}
}
return res;
}
}