思路:遍历传入字符串数组中的每一各字符串,并将每个字符串首先按空格分隔,这样就可以得到一个只有两个元素的数组,数组的第一个元素每个字符串的次数为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;
}