哈希算法题目:子域名访问计数
字数 1235 2025-10-28 11:34:06
哈希算法题目:子域名访问计数
题目描述
一个网站域名由多个子域名组成,最顶层是顶级域名,接着是二级域名、三级域名等。例如 "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"
- 例如 "discuss.leetcode.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
- 第一个条目:"9001 discuss.leetcode.com"
-
算法复杂度
- 时间复杂度:O(N×L),其中 N 是条目数,L 是域名平均长度
- 空间复杂度:O(N×L),用于存储哈希表
-
关键点
- 域名拆解时要从后往前组合
- 注意字符串分割和整数转换的细节处理
- 哈希表的使用是核心,确保高效统计