500-键盘行

2019-11-06  本文已影响0人  饮酒醉回忆

键盘行

题目

给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。

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()]);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读