当前位置: 面试刷题>> 子域名访问计数 (经典算法题500道)


### 题目描述 题目:**子域名访问计数** 假设你有一个网站,其URL由多个子域名和主域名组成,例如:"www.example.com" 和 "mail.example.com"。为了分析网站流量,你需要编写一个程序来计算并返回每个子域名(包括顶级域名)的访问次数。子域名由点(".")分隔,并且每个子域名都是唯一的,不考虑大小写。 输入数据将是一系列的URL字符串,每个URL代表一次访问。输出应该是一个映射(或字典),其中键是子域名(包括顶级域名),值是相应的访问次数。 **示例**: 输入: ``` ["www.example.com", "mail.example.com", "developers.mail.example.com", "www.example.com"] ``` 输出: ``` {"example.com": 3, "mail.example.com": 2, "www.example.com": 2, "developers.mail.example.com": 1} ``` **注意**: - 访问次数统计时,应包含所有子域名(包括顶级域名)的访问次数。 - 输出的映射(或字典)中,键应为小写形式,以保持一致性和简化处理。 ### PHP 示例代码 ```php function subdomainVisits($cpdomains) { $counts = []; foreach ($cpdomains as $domain) { $parts = explode('.', strtolower($domain)); $length = count($parts); // 从最顶层域名开始计数,直到当前域名 for ($i = $length - 1; $i >= 0; $i--) { $subdomain = implode('.', array_slice($parts, $i)); if (!isset($counts[$subdomain])) { $counts[$subdomain] = 0; } $counts[$subdomain]++; } } return $counts; } // 示例用法 $domains = ["www.example.com", "mail.example.com", "developers.mail.example.com", "www.example.com"]; $result = subdomainVisits($domains); print_r($result); ``` ### Python 示例代码 ```python def subdomainVisits(cpdomains): counts = {} for domain in cpdomains: parts = domain.lower().split('.') length = len(parts) # 从后往前遍历,构建所有子域名 for i in range(length - 1, -1, -1): subdomain = '.'.join(parts[i:]) if subdomain not in counts: counts[subdomain] = 0 counts[subdomain] += 1 return counts # 示例用法 domains = ["www.example.com", "mail.example.com", "developers.mail.example.com", "www.example.com"] result = subdomainVisits(domains) print(result) ``` ### JavaScript 示例代码 ```javascript function subdomainVisits(cpdomains) { let counts = {}; cpdomains.forEach(domain => { let parts = domain.toLowerCase().split('.'); let length = parts.length; // 从后往前遍历,累加所有子域名的计数 for (let i = length - 1; i >= 0; i--) { let subdomain = parts.slice(i).join('.'); if (!counts[subdomain]) { counts[subdomain] = 0; } counts[subdomain]++; } }); return counts; } // 示例用法 const domains = ["www.example.com", "mail.example.com", "developers.mail.example.com", "www.example.com"]; const result = subdomainVisits(domains); console.log(result); ``` 以上代码均实现了题目要求的功能,并通过示例用法进行了验证。在码小课网站上发布此类内容,可以帮助更多学习者理解和应用这些算法。
推荐面试题