思路
通过「哈希表」记录各级域名的计数:domain: count
。
遍历输入数组,数组中的每个元素满足"rep d1.d2.d3"
的格式,因此通过空格将字符串切分为两块,第一块为rep
,转换为整型记录;第二块为域名本身,需要从顶级域名d3
开始逐级向上处理d2.d3
,d1.d2.d3
。
逐级向上处理的过程可以想象为从后往前找字符.找到后取出后面的子串即为一个域名,通过对「哈希表」的处理来实现各级域名的计数即可。
代码如下:
class Solution {
public List<String> subdomainVisits(String[] cpdomains) {
HashMap<String, Integer> map = new HashMap<>();
for (String cpdomain : cpdomains) {
String[] countAndDomain = cpdomain.split(" ", 2); //首先将次数和域名分开
int count = Integer.parseInt(countAndDomain[0]);
String domain = countAndDomain[1];
for (int i = domain.length() - 1; i >= 0 ; i--) {
if (domain.charAt(i) == '.'){
String subDomain = domain.substring(i + 1);
map.put(subDomain, map.getOrDefault(subDomain, 0) + count);
}
}
//最下级的域名处理
map.put(domain, map.getOrDefault(domain, 0) + count);
}
ArrayList<String> ans = new ArrayList<>();
map.forEach((k , v)->{
ans.add(v + " " + k);
});
return ans;
}
}