哈希算法题目:子域名访问计数
字数 1235 2025-10-28 11:34:06

哈希算法题目:子域名访问计数

题目描述
一个网站域名由多个子域名组成,最顶层是顶级域名,接着是二级域名、三级域名等。例如 "discuss.leetcode.com" 中,"com" 是顶级域名,"leetcode" 是二级域名,"discuss" 是三级域名。

当访问一个子域名时,也会隐含访问其父域名。例如访问 "discuss.leetcode.com" 时,也会访问 "leetcode.com" 和 "com"。

现在给你一个计数配对域名列表 cpdomains,每个元素是 [计数, 域名] 的字符串格式,例如 ["9001 discuss.leetcode.com"]。需要统计每个子域名(包含父域名)被访问的次数,返回任意顺序的统计结果,格式为 [计数, 域名]

解题过程

  1. 理解题目要求

    • 输入:字符串数组,每个元素是 "计数 域名" 格式
    • 输出:字符串数组,每个元素是 "计数 域名" 格式
    • 需要统计所有层级的域名(包括父域名)的访问次数
  2. 核心思路分析

    • 使用哈希表记录每个域名出现的次数
    • 对每个输入条目,需要拆解出所有层级的域名
    • 将计数累加到哈希表中对应的域名上
  3. 具体实现步骤

    • 创建空的哈希表 domain_count
    • 遍历 cpdomains 中的每个条目:
      • 按空格分割,得到计数和完整域名
      • 将计数转换为整数
      • 按 "." 分割完整域名,得到各个部分
      • 从最后一部分开始向前组合,生成所有层级的域名:
        • 例如 "discuss.leetcode.com":
          • 三级域名:"discuss.leetcode.com"
          • 二级域名:"leetcode.com"
          • 一级域名:"com"
      • 对每个生成的域名,在哈希表中累加计数
    • 遍历哈希表,将结果格式化为要求的形式
  4. 示例演示
    输入:["9001 discuss.leetcode.com", "50 leetcode.com"]
    处理过程:

    • 第一个条目:"9001 discuss.leetcode.com"
      • 拆解域名:["discuss", "leetcode", "com"]
      • 生成域名:
        • discuss.leetcode.com → +9001
        • leetcode.com → +9001
        • com → +9001
    • 第二个条目:"50 leetcode.com"
      • 拆解域名:["leetcode", "com"]
      • 生成域名:
        • leetcode.com → +50
        • com → +50
    • 最终统计:
      • discuss.leetcode.com: 9001
      • leetcode.com: 9001 + 50 = 9051
      • com: 9001 + 50 = 9051
  5. 算法复杂度

    • 时间复杂度:O(N×L),其中 N 是条目数,L 是域名平均长度
    • 空间复杂度:O(N×L),用于存储哈希表
  6. 关键点

    • 域名拆解时要从后往前组合
    • 注意字符串分割和整数转换的细节处理
    • 哈希表的使用是核心,确保高效统计
哈希算法题目:子域名访问计数 题目描述 一个网站域名由多个子域名组成,最顶层是顶级域名,接着是二级域名、三级域名等。例如 "discuss.leetcode.com" 中,"com" 是顶级域名,"leetcode" 是二级域名,"discuss" 是三级域名。 当访问一个子域名时,也会隐含访问其父域名。例如访问 "discuss.leetcode.com" 时,也会访问 "leetcode.com" 和 "com"。 现在给你一个计数配对域名列表 cpdomains ,每个元素是 [计数, 域名] 的字符串格式,例如 ["9001 discuss.leetcode.com"] 。需要统计每个子域名(包含父域名)被访问的次数,返回任意顺序的统计结果,格式为 [计数, 域名] 。 解题过程 理解题目要求 输入:字符串数组,每个元素是 "计数 域名" 格式 输出:字符串数组,每个元素是 "计数 域名" 格式 需要统计所有层级的域名(包括父域名)的访问次数 核心思路分析 使用哈希表记录每个域名出现的次数 对每个输入条目,需要拆解出所有层级的域名 将计数累加到哈希表中对应的域名上 具体实现步骤 创建空的哈希表 domain_count 遍历 cpdomains 中的每个条目: 按空格分割,得到计数和完整域名 将计数转换为整数 按 "." 分割完整域名,得到各个部分 从最后一部分开始向前组合,生成所有层级的域名: 例如 "discuss.leetcode.com": 三级域名:"discuss.leetcode.com" 二级域名:"leetcode.com" 一级域名:"com" 对每个生成的域名,在哈希表中累加计数 遍历哈希表,将结果格式化为要求的形式 示例演示 输入:[ "9001 discuss.leetcode.com", "50 leetcode.com" ] 处理过程: 第一个条目:"9001 discuss.leetcode.com" 拆解域名:[ "discuss", "leetcode", "com" ] 生成域名: discuss.leetcode.com → +9001 leetcode.com → +9001 com → +9001 第二个条目:"50 leetcode.com" 拆解域名:[ "leetcode", "com" ] 生成域名: leetcode.com → +50 com → +50 最终统计: discuss.leetcode.com: 9001 leetcode.com: 9001 + 50 = 9051 com: 9001 + 50 = 9051 算法复杂度 时间复杂度:O(N×L),其中 N 是条目数,L 是域名平均长度 空间复杂度:O(N×L),用于存储哈希表 关键点 域名拆解时要从后往前组合 注意字符串分割和整数转换的细节处理 哈希表的使用是核心,确保高效统计