题目
给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
美式键盘 中:
第一行由字符 “qwertyuiop” 组成。
第二行由字符 “asdfghjkl” 组成。
第三行由字符 “zxcvbnm” 组成。
解题思路
给键盘每一行字符与行数映射一下,然后对每个单词的每个字符进行映射取值,取映射值全一样的。
代码
class Solution {
public String[] findWords(String[] words) {
int[] map = new int[26];
String[] keyboard = {"qwertyuiop", "asdfghjkl", "zxcvbnm"};
for (int i = 0; i < keyboard.length; i++) {
for (int j = 0; j < keyboard[i].length(); j++) {
map[keyboard[i].charAt(j) - 'a'] = i;
}
}
List<String> tmp = new ArrayList<>();
for (String word : words) {
String lowerWord = word.toLowerCase();
int row = 0;
for (int i = 0; i < lowerWord.length(); i++) {
if (i == 0) row = map[lowerWord.charAt(i) - 'a'];
else if (row != map[lowerWord.charAt(i) - 'a']) break;
if (i == lowerWord.length() - 1) tmp.add(word);
}
}
String[] ans = new String[tmp.size()];
for (int i = 0; i < tmp.size(); i++) {
ans[i] = tmp.get(i);
}
return ans;
}
}
什么? 凎碎了100%/97.60%?盲猜样例太少了。