键盘行
题目
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
image示例:
输入: ["Hello", "Alaska", "Dad", "Peace"]
输出: ["Alaska", "Dad"]
注意:
你可以重复使用键盘上同一字符。
你可以假设输入的字符串将只包含字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/keyboard-row
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
一种是笨办法,使用散列表存储
领扣有另一种解法是将键盘行存储在数组中,然后通过数组的比较查找确定.与散列表时间复杂度相同,内存消耗较少
代码
class Solution {
public String[] findWords(String[] words) {
//使用散列表存储键盘字母,然后遍历列表
List<String> result = new ArrayList();
Map<Character,Integer> cash = new HashMap();
cash.put('Q',1);
cash.put('W',1);
cash.put('E',1);
cash.put('R',1);
cash.put('T',1);
cash.put('Y',1);
cash.put('U',1);
cash.put('I',1);
cash.put('O',1);
cash.put('P',1);
cash.put('q',1);
cash.put('w',1);
cash.put('e',1);
cash.put('r',1);
cash.put('t',1);
cash.put('y',1);
cash.put('u',1);
cash.put('i',1);
cash.put('o',1);
cash.put('p',1);
cash.put('a',2);
cash.put('s',2);
cash.put('d',2);
cash.put('f',2);
cash.put('g',2);
cash.put('h',2);
cash.put('j',2);
cash.put('k',2);
cash.put('l',2);
cash.put('A',2);
cash.put('S',2);
cash.put('D',2);
cash.put('F',2);
cash.put('G',2);
cash.put('H',2);
cash.put('J',2);
cash.put('K',2);
cash.put('L',2);
cash.put('z',3);
cash.put('x',3);
cash.put('c',3);
cash.put('v',3);
cash.put('b',3);
cash.put('n',3);
cash.put('m',3);
cash.put('Z',3);
cash.put('X',3);
cash.put('C',3);
cash.put('V',3);
cash.put('B',3);
cash.put('N',3);
cash.put('M',3);
for(int i = 0;i < words.length;i++){
int level = cash.get(words[i].charAt(0));
boolean flag = true;
for(int j = 1;j < words[i].length();j++){
int num = cash.get(words[i].charAt(j));
if(num != level){
flag = false;
}
}
if(flag){
result.add(words[i]);
}
}
return result.toArray(new String[result.size()]);
}
}
网友评论