leetcode子域名简单记数

思路:遍历传入字符串数组中的每一各字符串,并将每个字符串首先按空格分隔,这样就可以得到一个只有两个元素的数组,数组的第一个元素每个字符串的次数为num,第二个元素为字符串。再将第二个元素也就是字符串按“.”分隔(注意java中的split方法以“.”进行分割时应注意转义,“\.”)得到第二个数组。此后对第二个数组进行遍历,将每个元素放入map中(key为遍历到的域名,value为次数),放入之前判断,若map中存在key,就将这个key对应的value值取出,加上当前的次数,再放入map中。大致思路就是这样,时间用了大概20ms,感觉还是偏慢,还需优化。
附上代码:

 public static List<String> subdomainVisits(String[] cpdomains) {
        Map<String,Integer> map = new HashMap<>();

        for (int i = 0;i<cpdomains.length;i++){
            String string = "";
            String[] split = cpdomains[i].split(" ");
            Integer num = Integer.parseInt(split[0]);
            String[] split1 = split[1].split("\\.");

            for (int j = split1.length-1;j>=0;j--){
                if (j == split1.length-1){
                    string+=split1[j];
                    if (map.containsKey(string)){
                        Integer n = map.get(string)+num;
                        map.put(string,n);
                        continue;
                    }
                    map.put(string,num);

                }else {
                    string = split1[j] + "." + string;
                    if (map.containsKey(string)){
                        Integer n = map.get(string)+num;
                        map.put(string,n);
                        continue;
                    }
                    map.put(string, num);
                }

            }

        }
       List<String> list = new ArrayList<>();
        for (Map.Entry<String,Integer> entry: map.entrySet()) {
            list.add(entry.getValue()+" "+ entry.getKey());
        }
        return list;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值