给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
示例1:
输入: ["Hello", "Alaska", "Dad", "Peace"] 输出: ["Alaska", "Dad"]
注意:
- 你可以重复使用键盘上同一字符。
- 你可以假设输入的字符串将只包含字母。
思路:为键盘的每一行字符构建一个哈希表,判断给定字符串是否完全由其中一个哈希表的字符构成。
class Solution {
public String[] findWords(String[] words) {
String s1="qwertyuiopQWERTYUIOP";
String s2="asdfghjklASDFGHJKL";
String s3="zxcvbnmZXCVBNM";
//为每一行的字符分别构建哈希表
HashMap<Character,Integer> map1=new HashMap<Character,Integer>();
HashMap<Character,Integer> map2=new HashMap<Character,Integer>();
HashMap<Character,Integer> map3=new HashMap<Character,Integer>();
for(char c:s1.toCharArray()) {
map1.put(c, 1);
}
for(char c:s2.toCharArray()) {
map2.put(c, 1);
}
for(char c:s3.toCharArray()) {
map3.put(c, 1);
}
int i=0;
for(String s:words) {
if(isTrue(s,map1)||isTrue(s,map2)||isTrue(s,map3)) {
words[i]=s;
i++;
}
}
return Arrays.copyOfRange(words, 0, i);
}
//判断给定字符串是否由map表中的字符构成
public boolean isTrue(String s,HashMap<Character,Integer> map) {
for(char c:s.toCharArray()) {
if(!map.containsKey(c)) {
return false;
}
}
return true;
}
}