当前位置: 面试刷题>> 子域名访问计数 (经典算法题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);
```
以上代码均实现了题目要求的功能,并通过示例用法进行了验证。在码小课网站上发布此类内容,可以帮助更多学习者理解和应用这些算法。