给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
示例:
输入: ["Hello", "Alaska", "Dad", "Peace"]
输出: ["Alaska", "Dad"]
注意:
你可以重复使用键盘上同一字符。
你可以假设输入的字符串将只包含字母。
思路:首先编写键盘每一行作为一个Set集合,取给定的每一个字符串,利用Set集合的contains()方法逐个字符比较,如果全部遍历完毕都在该行键盘组成的字符串中,则可以输出,否则不输出。
public String[] findWords(String[] words) {
if (words.length == 0) {
return new String[0];
}
String[] res = null;
Set<Character> oneSet = new HashSet<Character>();
Set<Character> twoSet = new HashSet<Character>();
Set<Character> threeSet = new HashSet<Character>();
char[] one = {'Q','W','E','R','T','Y','U','I','O','P'};
char[] two = {'A','S','D','F','G','H','J','K','L'};
char[] three = {'Z','X','C','V','B','N','M'};
for (char c : two) {
twoSet.add(c);
twoSet.add((c+"").toLowerCase().charAt(0));
}
for (char c : one) {
oneSet.add(c);
oneSet.add((c+"").toLowerCase().charAt(0));
}
for (char c : three) {
threeSet.add(c);
threeSet.add((c+"").toLowerCase().charAt(0));
}
String string = "";
for (String str : words) {
char[] chs = str.toCharArray();
boolean oneflag=true, twoflag=true,threeflag=true;
for (char c : chs) {
if (!oneSet.contains(c)) {
oneflag = false;
}
if (!twoSet.contains(c)) {
twoflag = false;
}
if (!threeSet.contains(c)) {
threeflag = false;
}
}
if (threeflag || twoflag || oneflag) {
string+=str;
string+=",";
}
}
if (string.length()>0) {
string = string.substring(0, string.length()-1);
res = string.split(",");
return res;
}else {
return new String[0];
}
}