键盘行算法
给你一个字符串数组 words
,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
请注意,字符串 不区分大小写,相同字母的大小写形式都被视为在同一行。
美式键盘 中:
- 第一行由字符
"qwertyuiop"
组成。 - 第二行由字符
"asdfghjkl"
组成。 - 第三行由字符
"zxcvbnm"
组成。
示例 1:
输入:words = ["Hello","Alaska","Dad","Peace"]
输出:["Alaska","Dad"]
解释:
由于不区分大小写,"a"
和 "A"
都在美式键盘的第二行。
示例 2:
输入:words = ["omk"]
输出:[]
示例 3:
输入:words = ["adsdf","sfd"]
输出:["adsdf","sfd"]
提示:
1 <= words.length <= 20
1 <= words[i].length <= 100
words[i]
由英文字母(小写和大写字母)组成
class Solution {
public String[] findWords(String[] words) {
String first = "qwertyuiop";
String second = "asdfghjkl";
String third = "zxcvbnm";
List<String> list = new ArrayList<>();
int line = 0;
for (String str : words) {
char[] arr = str.toLowerCase().toCharArray();
for (int j = 0; j < arr.length; j++) {
if (line == 0) {
if (first.contains(String.valueOf(arr[j]))) {
line = 1;
}
if (second.contains(String.valueOf(arr[j]))) {
line = 2;
}
if (third.contains(String.valueOf(arr[j]))) {
line = 3;
}
}
if (line == 1) {
if (first.contains(String.valueOf(arr[j]))) {
if (j == arr.length - 1) {
line = 0;
list.add(str);
}
} else {
line = 0;
break;
}
}
if (line == 2) {
if (second.contains(String.valueOf(arr[j]))) {
if (j == arr.length - 1) {
line = 0;
list.add(str);
}
} else {
line = 0;
break;
}
}
if (line == 3) {
if (third.contains(String.valueOf(arr[j]))) {
if (j == arr.length - 1) {
line = 0;
list.add(str);
}
} else {
line = 0;
break;
}
}
}
}
return list.toArray(new String[list.size()]);
}
}