友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
|
|
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

公众号的微信号是: jikerizhi。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
811. 子域名访问计数
网站域名 discuss.leetcode.com 由多个子域名组成。顶级域名为 com,二级域名为 leetcode.com,最低一级为 discuss.leetcode.com。当访问域名 discuss.leetcode.com 时,同时也会隐式访问其父域名 leetcode.com 以及 com。
计数配对域名 是遵循 rep d1.d2.d3 或 rep d1.d2 格式的一个域名表示,其中 rep 表示访问域名的次数,d1.d2.d3 为域名本身。
-
例如,
9001 discuss.leetcode.com就是一个 计数配对域名,表示discuss.leetcode.com被访问了9001次。
给你一个 计数配对域名 组成的数组 cpdomains,解析得到输入中每个子域名对应的 计数配对域名,并以数组形式返回。可以按 任意顺序 返回答案。
示例 1:
输入:cpdomains = ["9001 discuss.leetcode.com"] 输出:["9001 leetcode.com","9001 discuss.leetcode.com","9001 com"] 解释:例子中仅包含一个网站域名:"discuss.leetcode.com"。 按照前文描述,子域名 "leetcode.com" 和 "com" 都会被访问,所以它们都被访问了 9001 次。
示例 2:
输入:cpdomains = ["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"] 输出:["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"] 解释:按照前文描述,会访问 "google.mail.com" 900 次,"yahoo.com" 50 次,"intel.mail.com" 1 次,"wiki.org" 5 次。 而对于父域名,会访问 "mail.com" 900 + 1 = 901 次,"com" 900 + 50 + 1 = 951 次,和 "org" 5 次。
提示:
-
1 <= cpdomain.length <= 100 -
1 <= cpdomain[i].length <= 100 -
cpdomain[i]会遵循repi d1i.d2i.d3i或repi d1i.d2i格式 -
repi是范围[1, 104]内的一个整数 -
d1i、d2i和d3i由小写英文字母组成
思路分析
哈希+字符串解析:从字符串中解析出数字和域名,再对域名解析出子域名。
-
一刷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* @author D瓜哥 · https://www.diguage.com
* @since 2026-07-05 21:38:16
*/
public List<String> subdomainVisits(String[] cpdomains) {
Map<String, Integer> counter = new HashMap<>();
for (String cpdomain : cpdomains) {
int index = cpdomain.indexOf(" ");
int count = Integer.parseInt(cpdomain.substring(0, index));
String domain = cpdomain.substring(index + 1);
while (!domain.isEmpty()) {
counter.put(domain, counter.getOrDefault(domain, 0) + count);
int idx = domain.indexOf(".");
if (idx == -1) {
break;
}
domain = domain.substring(idx + 1);
}
}
List<String> result = new ArrayList<>(counter.size());
counter.forEach((key, value) -> {
result.add(value + " " + key);
});
return result;
}

