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

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

刚开始我想把这些字母做成字符数组,然后转化成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()]);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,625评论 0 17
  • 和老妈谈及她们那个年代的婚姻,老妈说,其实那时候的许多人,也是因为到了年纪,觉得结婚是该完成的一项任务,然后经人介...
    一蓑烟雨_886阅读 96评论 0 0
  • 1.不犟:尝试是冒险,但不尝试才是最大的冒险!开始行动才是规避风险的最好方式! 2.兴趣➡乐趣➡志趣 3.选择策略...
    奥黛丽黑喵阅读 193评论 0 0
  • 我想我怎么样都要写关于啊乌的一篇文章,以此纪念我最深爱的它。 啊乌是谁,其实它是我家的一名小成员,傻傻的呆萌的它,...
    米德尔阅读 459评论 2 3