列表

详情


811. 子域名访问计数

网站域名 "discuss.leetcode.com" 由多个子域名组成。顶级域名为 "com" ,二级域名为 "leetcode.com" ,最低一级为 "discuss.leetcode.com" 。当访问域名 "discuss.leetcode.com" 时,同时也会隐式访问其父域名 "leetcode.com" 以及 "com"

计数配对域名 是遵循 "rep d1.d2.d3""rep d1.d2" 格式的一个域名表示,其中 rep 表示访问域名的次数,d1.d2.d3 为域名本身。

给你一个 计数配对域名 组成的数组 cpdomains ,解析得到输入中每个子域名对应的 计数配对域名 ,并以数组形式返回。可以按 任意顺序 返回答案。

 

示例 1:

输入:cpdomains = ["9001 discuss.leetcode.com"]
输出:["9001 leetcode.com","9001 discuss.leetcode.com","9001 com"]
解释:例子中仅包含一个网站域名:"discuss.leetcode.com"。
按照前文描述,子域名 "leetcode.com" 和 "com" 都会被访问,所以它们都被访问了 9001 次。

示例 2:

输入:cpdomains = ["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]
输出:["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"]
解释:按照前文描述,会访问 "google.mail.com" 900 次,"yahoo.com" 50 次,"intel.mail.com" 1 次,"wiki.org" 5 次。
而对于父域名,会访问 "mail.com" 900 + 1 = 901 次,"com" 900 + 50 + 1 = 951 次,和 "org" 5 次。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<string> subdomainVisits(vector<string>& cpdomains) { } };

golang 解法, 执行用时: 8 ms, 内存消耗: 6.4 MB, 提交时间: 2021-06-11 14:17:23

func subdomainVisits(cpdomains []string) (ans []string) {
	mp := make(map[string]int)
	for _, cp := range cpdomains {
		arr := strings.Split(cp, " ")
		cc := strings.Split(arr[1], ".")
		d, _ := strconv.Atoi(arr[0])
		for i := 0; i < len(cc); i++ {
			key := strings.Join(cc[i:], ".")
			mp[key] += d
		}
	}
	for k, v := range mp {
		ans = append(ans, strconv.Itoa(v) + " " + k)
	}
	return
}

javascript 解法, 执行用时: 76 ms, 内存消耗: 44.3 MB, 提交时间: 2023-08-08 09:39:33

/**
 * @param {string[]} cpdomains
 * @return {string[]}
 */
var subdomainVisits = function(cpdomains) {
    const ans = [];
    const counts = new Map();
    for (const cpdomain of cpdomains) {
        const space = cpdomain.indexOf(' ');
        const count = parseInt(cpdomain.slice(0, space));
        const domain = cpdomain.slice(space + 1);
        counts.set(domain, (counts.get(domain) || 0) + count);
        for (let i = 0; i < domain.length; i++) {
            if (domain[i] === '.') {
                const subdomain = domain.slice(i + 1);
                counts.set(subdomain, (counts.get(subdomain) || 0) + count);
            }
        }
    }
    for (const [subdomain, count] of counts.entries()) {
        ans.push(count + " " + subdomain);
    }
    return ans;
};

java 解法, 执行用时: 16 ms, 内存消耗: 43.3 MB, 提交时间: 2023-08-08 09:39:08

class Solution {
    public List<String> subdomainVisits(String[] cpdomains) {
        var cnt = new HashMap<String, Integer>();
        for (var v : cpdomains) {
            int i = v.indexOf(" ");
            int a = Integer.parseInt(v.substring(0, i));
            for (; i < v.length(); ++i) {
                if (v.charAt(i) == ' ' || v.charAt(i) == '.') {
                    var t = v.substring(i + 1);
                    cnt.put(t, cnt.getOrDefault(t, 0) + a);
                }
            }
        }
        var ans = new ArrayList<String>();
        for (var e : cnt.entrySet()) {
            ans.add(e.getValue() + " " + e.getKey());
        }
        return ans;
    }
}

python3 解法, 执行用时: 60 ms, 内存消耗: 16.1 MB, 提交时间: 2023-08-08 09:38:10

class Solution:
    def subdomainVisits(self, cpdomains: List[str]) -> List[str]:
        from collections import Counter
        cnt = Counter()
        for s in cpdomains:
            v = int(s[:s.index(' ')])
            for i, c in enumerate(s):
                if c in ' .':
                    cnt[s[i + 1:]] += v
        return [f'{v} {s}' for s, v in cnt.items()]

上一题