美文网首页
leetcode的每日一题更新(keyboard row)

leetcode的每日一题更新(keyboard row)

作者: 今天是晴天 | 来源:发表于2017-09-13 22:18 被阅读0次

这个题目的意思是键盘的字母总共有三行,参数是一组字符数组,如果数组里有全在一行的字符串,将这些字符串组成字符数组并返回。

刚开始我想把这些字母做成字符数组,然后转化成list,用list的contains方法来字符串数组中的每个字符串的每个字符,并每行字母用一个数字来计数,如果这个数字等于字符串的length()则将这个字符串添加add进ArrayList中,返回的时候将ArrayList转化成String数组,这样就不会有String数组初始化时大小的限制,写完以后运行发现根本出不来结果,debug发现根本进不去那个字符包含的判断,想了半天没有想出哪里出了问题,刚好查api的时候查到String里面也有一个contain方法,不过需要的参数是一个CharSequence,所以在判断那里要在字符前面加上“”空字符串来转换,因为String实现了CharSequence接口,运行以后完美运行,然后做了一些优化,如果三行中的计数数字任意两个大于0则退出,这样就可以减少一些循环次数,提交以后成功accepted。附上自己写的代码:

    public String[] findWords(String[] words) {
        int d=0,e=0,f=0;
        List result = new ArrayList();
        String key1 = "qwertyuiopQWERTYUIOP";
        String key2 = "asdfghjklASDFGHJKL";
        String key3 = "zxcvbnmZXCVBNM";
        for(int i=0;i<words.length;i++){
            for(int j=0;j<words[i].length();j++){
                if(key1.contains(""+words[i].charAt(j)))d++;
                if(key2.contains(""+words[i].charAt(j)))e++;
                if(key3.contains(""+words[i].charAt(j)))f++;
                if(d>0 && e>0)break;
                if(d>0 && f>0)break;
                if(e>0 && f>0)break;
                if(d == words[i].length() || e==words[i].length() || f==words[i].length()){
                    result.add(words[i]);
                }
            }
            d=0;
            e=0;
            f=0;
        }
        return (String[]) result.toArray(new String[result.size()]);
    }

相关文章

网友评论

      本文标题:leetcode的每日一题更新(keyboard row)

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