500. Keyboard Row
链接
题意
给定一个单词数组,返回那些能仅用键盘上一行字母构成的单词
注意:
- 可以重复使用字母
- 忽略大小写(全部视为小写)
思路
将每行字母各自存放到一个数组里面,然后分别遍历,用HashMap为三组字母放入不同的key值,以此来区分某个字母属于键盘上的哪一行。
然后对给定单词数组进行遍历,只需拿到每个单词的首字母,然后用后面的字母一一与首字母进行比较,判断map的value值是否相等即可。
若全部相等,则说明该单词符合条件。
代码
Java:
public class Solution {
public String[] findWords(String[] words) {
String arr1[] = {"q", "w", "e", "r", "t", "y", "u", "i", "o", "p"};
String arr2[] = {"a", "s", "d", "f", "g", "h", "j", "k", "l"};
String arr3[] = {"z", "x", "c", "v", "b", "n", "m"};
HashMap map = new HashMap();
ArrayList list = new ArrayList();
for (int i = 0; i < 10; i++) {
map.put(arr1[i], 1);
}
for (int i = 0; i < 9; i++) {
map.put(arr2[i], 2);
}
for (int i = 0; i < 7; i++) {
map.put(arr3[i], 3);
}
for (int i = 0; i < words.length; i++) {
boolean flag = true;
for (int j = 0; j < words[i].length(); j++) {
if (map.get("" + words[i].toLowerCase().charAt(0)) != map.get("" + words[i].toLowerCase().charAt(j))) {
flag = false;
break;
}
}
if (flag) {
list.add(words[i]);
}
}
String[] ans = new String[list.size()];
return (String[]) list.toArray(ans);
}
}