美文网首页
500-键盘行

500-键盘行

作者: 饮酒醉回忆 | 来源:发表于2019-11-06 10:11 被阅读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()]);
        }
    }
    

    相关文章

      网友评论

          本文标题:500-键盘行

          本文链接:https://www.haomeiwen.com/subject/quoybctx.html