一个网站域名,如"discuss.leetcode.com",包含了多个子域名。作为顶级域名,常用的有"com",下一级则有"leetcode.com",最低的一级为"discuss.leetcode.com"。当我们访问域名"discuss.leetcode.com"时,也同时访问了其父域名"leetcode.com"以及顶级域名 "com"。
给定一个带访问次数和域名的组合,要求分别计算每个域名被访问的次数。其格式为访问次数+空格+地址,例如:"9001 discuss.leetcode.com"。
接下来会给出一组访问次数和域名组合的列表cpdomains
。要求解析出所有域名的访问次数,输出格式和输入格式相同,不限定先后顺序。
class Solution {
public List<String> subdomainVisits(String[] cpdomains) {
List<String> list = new ArrayList<String>();
Map<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < cpdomains.length; i++) {
String[] s = cpdomains[i].split(" ");
if(map.containsKey(s[1])){
map.put(s[1], Integer.parseInt(s[0])+map.get(s[1]));
}else{
map.put(s[1], Integer.parseInt(s[0]));
}
int index1 = s[1].indexOf(".");
s[1] = s[1].substring(index1 +1);
if(map.containsKey(s[1]) && index1 != -1){
map.put(s[1], Integer.parseInt(s[0])+map.get(s[1]));
}else if(!map.containsKey(s[1]) && index1 != -1){
map.put(s[1], Integer.parseInt(s[0]));
}
if(index1 == -1 ) break;
int index2 = s[1].indexOf(".");
s[1] = s[1].substring(index2 +1);
if(map.containsKey(s[1])&& index2 !=-1){
map.put(s[1], Integer.parseInt(s[0])+map.get(s[1]));
}else if(!map.containsKey(s[1])&& index2 !=-1){
map.put(s[1], Integer.parseInt(s[0]));
}
}
for(Map.Entry<String, Integer> m:map.entrySet()){
StringBuffer sb = new StringBuffer();
sb.append(m.getValue().toString()).append(" ").append(m.getKey());
list.add(sb.toString());
}
return list;
}
}