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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sMsRsufE-1602331366878)(http://www.ztinfo.xyz/upload/2019/12/image-a7a5c67e921042d9ab2a40f5c396a819.png)]

示例:

输入: [“Hello”, “Alaska”, “Dad”, “Peace”]
输出: [“Alaska”, “Dad”]

思路:

先遍历输入的字符串数组,取出首字符,定位到是在哪一行的字符串,取出那一行的字符串,再遍历字符串中的每个取到每个字符判断是否都在这一行字符串中,如果都是则把这个字符串添加到集合中,最后把集合转换成字符串数组即可。

代码如下:

public String[] findWords(String[] words) {
        //定义一个数组,用于存放是哪一行
        String [] line = new String[]{"qwertyuiop","asdfghjkl","zxcvbnm"};
        List<String> list = new ArrayList<>();
        //遍历数组得到数组中每项字符串
        for(int i=0;i<words.length;i++){

            String s = words[i];
            String s1 = s.toLowerCase();
            char c = s1.charAt(0);
            String s2 = null;
            for(int j=0;j<line.length;j++){
                if(line[j].indexOf(c)!=-1){
                    s2 = line[j];
                }
            }
            //取出这行字符串和之前的字符串,写一个方法判断是否每个字符都与这行字符相同,
            if(isblik(s1,s2)){
                list.add(s);
            }
        }
        return list.toArray(new String[list.size()]);
    }

    private boolean isblik(String s1, String s2) {
        for(int i=0;i<s1.length();i++){
            char c = s1.charAt(i);
            if(s2.indexOf(c) == -1){
                return false;
            }
        }
        return true;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值