写点什么

【LeetCode】子域名访问计数 Java 题解

作者:Albert
  • 2022 年 10 月 05 日
    北京
  • 本文字数:1453 字

    阅读完需:约 5 分钟

题目描述

网站域名 "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 次。
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/subdomain-visit-count著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的算法题目是字符串处理题目,题目要求计算子域名访问计数。那什么是子域名呢?题目中给定了子域名的定义,网站域名 "discuss.leetcode.com" 由多个子域名组成。顶级域名为 "com" ,二级域名为 "leetcode.com" ,最低一级为 "discuss.leetcode.com"。简单理解,就是我们需要从完整域名开始,按照 . 分割,依次分割出三级域名,二级域名和顶级域名。

  • 统计域名的访问次数,我们最常用的数据结构是 HashMap, HashMap 是以空间换时间的数据结构,我们可以以域名为 key, 访问次数为 value 做存储。

  • 在做字符串拼接的时候,建议使用 StringBuilder 来操作,执行效率高。具体实现代码如下,供参考。

通过代码

class Solution {    public List<String> subdomainVisits(String[] cpdomains) {        List<String> ans = new LinkedList<>();        Map<String, Integer> map = new HashMap<>();        for (String item : cpdomains) {            String[] temp = item.split(" ");            Integer nums = Integer.parseInt(temp[0]);            String domainInfo = temp[1];            List<String> domains = new LinkedList<>();            domains.add(domainInfo);            int n = domainInfo.length();            for (int i = 0; i < domainInfo.length(); i++) {                if ('.' == domainInfo.charAt(i)) {                    domains.add(domainInfo.substring(i + 1, n));                }            }
for (String domain : domains) { map.put(domain, map.getOrDefault(domain, 0) + nums); } }
for (Map.Entry<String, Integer> entry : map.entrySet()) { StringBuilder builder = new StringBuilder(); builder.append(entry.getValue()); builder.append(" "); builder.append(entry.getKey()); ans.add(builder.toString()); }
return ans; }
}
复制代码

总结

  • 这个题目理解题意之后,我们采用 hashMap 数据结构即可解决,本题重点考察的是对编程语言 API 的掌握程度。

  • 上述算法的时间复杂度是 O(n),空间复杂度是 O(n)

  • 坚持算法每日一题,加油!

发布于: 刚刚阅读数: 4
用户头像

Albert

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】子域名访问计数Java题解_LeetCode_Albert_InfoQ写作社区