LeetCode 子域名访问计数题解
LeetCode 子域名访问计数题解题目描述网站域名 discuss.leetcode.com 由多个子域名组成。顶级域名为 com二级域名为 leetcode.com三级域名为 discuss.leetcode.com。示例输入cpdomains [9001 discuss.leetcode.com]输出[9001 leetcode.com,9001 discuss.leetcode.com,9001 com]解题思路方法哈希表思路使用哈希表来解决这个问题。遍历每个域名解析出访问次数和域名。对于每个域名分割出所有的子域名。将每个子域名的访问次数累加到哈希表中。最后将哈希表中的结果转换为列表返回。复杂度分析时间复杂度O(n)其中 n 是域名的数量。每个域名最多被分割成它的级别数量。空间复杂度O(n)需要额外的空间来存储哈希表。代码实现方法哈希表from collections import defaultdict # 子域名访问计数哈希表 def subdomain_visits(cpdomains): count defaultdict(int) for cpdomain in cpdomains: # 解析访问次数和域名 visits, domain cpdomain.split() visits int(visits) # 分割域名 parts domain.split(.) n len(parts) # 累加每个子域名的访问次数 for i in range(n): subdomain ..join(parts[i:]) count[subdomain] visits # 将结果转换为列表 result [f{v} {k} for k, v in count.items()] return result # 测试 def test_subdomain_visits(): cpdomains [9001 discuss.leetcode.com] print(subdomain_visits(cpdomains)) # 输出[9001 leetcode.com, 9001 discuss.leetcode.com, 9001 com] cpdomains [900 google.mail.com, 50 yahoo.com, 1 intel.mail.com, 5 wiki.org] print(subdomain_visits(cpdomains)) # 输出[900 google.mail.com, 901 mail.com, 50 yahoo.com, 1 intel.mail.com, 5 wiki.org, 5 org, 1046 com] if __name__ __main__: test_subdomain_visits()测试用例测试用例 1基本情况输入cpdomains [9001 discuss.leetcode.com]输出[9001 leetcode.com,9001 discuss.leetcode.com,9001 com]测试用例 2多个域名输入cpdomains [900 google.mail.com, 50 yahoo.com, 1 intel.mail.com, 5 wiki.org]输出[900 google.mail.com,901 mail.com,50 yahoo.com,1 intel.mail.com,5 wiki.org,5 org,1046 com]总结子域名访问计数是一个经典的哈希表问题它可以通过哈希表来高效地解决。哈希表法的核心思想是遍历每个域名解析出所有的子域名将每个子域名的访问次数累加到哈希表中。掌握哈希表的使用方法对于解决类似的问题非常重要。