题目:
Given a List of words, return the words that can be typed using letters of alphabet on only one row’s of American keyboard like the image below.
Example:
Input: [“Hello”, “Alaska”, “Dad”, “Peace”]
Output: [“Alaska”, “Dad”]
思路:
我开始在想有没有什么简单的方法,就是键盘有什么规律,后来发现没有任何规律。。只能存三行了。。。。
用HashMap,把第一行的字母全放1,第二行的是2,第三行的是3。
然后用arraylist
先写个大的循环把单词记下来。
1.把它转换成全部小写。
2.取第一个字母带入map
3.开始循环是否相等,如果不相等直接break
Code:
public String[] findWords(String[] words) {
Map<Character,Integer> pattern = new HashMap<>();
for(char letter:"qwertyuiop".toCharArray()){
pattern.put(letter,1);
}
for(char letter:"asdfghjkl".toCharArray()){
pattern.put(letter,2);
}
for(char letter:"zxcvbnm".toCharArray()){
pattern.put(letter,3);
}
List<String> arraylist = new ArrayList<>();
for(String word:words){
String wordLower = word.toLowerCase();
int a = pattern.get(wordLower.charAt(0));
boolean isSame = true;
for(char l : wordLower.toCharArray()) {
if(pattern.get(l)!=a){
isSame = false;
break;
}
}
if(isSame) arraylist.add(word);
}
return arraylist.toArray(new String[arraylist.size()]);
}