05 August 2008
对于包含一个 . 的域名 x.y,需要统计的是 x.y 和 y;对于包含两个 . 的域名 a.b.c,我们需要统计的是 a.b.c,b.c 和 c。在统计这些字符串时,可以使用哈希映射(HashMap)。统计结束之后,我们遍历哈希映射并输出结果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public List<String> subdomainVisits(String[] cpdomains) {
Map<String, Integer> counts = new HashMap();
for (String domain : cpdomains) {
String[] cpinfo = domain.split("\\s+");
String[] frags = cpinfo[1].split("\\.");
int count = Integer.parseInt(cpinfo[0]);
String cur = "";
for (int i = frags.length - 1; i >= 0; --i) {
cur = frags[i] + (i < frags.length - 1 ? "." : "") + cur;
counts.put(cur, counts.getOrDefault(cur, 0) + count);
}
}
List<String> ans = new ArrayList();
for (String dom : counts.keySet())
ans.add("" + counts.get(dom) + " " + dom);
return ans;
}
}