/*
* 给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
示例1:
输入: ["Hello", "Alaska", "Dad", "Peace"]
输出: ["Alaska", "Dad"]
注意:
你可以重复使用键盘上同一字符。
你可以假设输入的字符串将只包含字母。
* 给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
示例1:
输入: ["Hello", "Alaska", "Dad", "Peace"]
输出: ["Alaska", "Dad"]
注意:
你可以重复使用键盘上同一字符。
你可以假设输入的字符串将只包含字母。
*/
public static String[] findWords(String[] words) {
// 思路:1.判断首字母在一行。得到的行数 调用该行的字母;
// 接着判断
// 将单词全部转换小写
String[] charKeyboards = { "qwertyuiop", "asdfghjkl", "zxcvbnm" };
ArrayList<String> list = new ArrayList<>();
for (String word : words) {
char ch = word.charAt(0);
if(ch<'a')
ch +=32;
int line = getKeyboardLine(charKeyboards, ch);
String lineStr = charKeyboards[line];
int i = 1;
for (; i < word.length(); i++) {
char ch1 = word.charAt(i);
if (!isIncludeChar(lineStr, ch1))
break;
}
if (i == word.length())
list.add(word);
}
String[] ss = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
ss[i] = list.get(i);
}
// 将小写转换成首字母大写
return ss;
}
private static boolean isIncludeChar(String lineStr, char ch) {
if(ch <'a')
ch+=32;
for (int i = 0; i < lineStr.length(); i++) {
char ch2 = lineStr.charAt(i);
if (ch == ch2)
return true;
}
return false;
}
private static int getKeyboardLine(String[] charKeyboards, char ch) {
if(ch<'a')
ch +=32;
for (int i = 0; i < charKeyboards.length; i++) {
String lines = charKeyboards[i];
for (int j = 0; j < lines.length(); j++) {
char ch2 = lines.charAt(j);
if (ch2 == ch)
return i;
}
}
return 10;
}