[LeetCode] Subdomain Visit Count

811. Subdomain Visit Count

A website domain “discuss.leetcode.com” consists of various subdomains. At the top level, we have “com”, at the next level, we have “leetcode.com” and at the lowest level, “discuss.leetcode.com”. When we visit a domain like “discuss.leetcode.com”, we will also visit the parent domains “leetcode.com” and “com” implicitly.

A count-paired domain is a domain that has one of the two formats “rep d1.d2.d3” or “rep d1.d2” where rep is the number of visits to the domain and d1.d2.d3 is the domain itself.

  • For example, “9001 discuss.leetcode.com” is a count-paired domain that indicates that discuss.leetcode.com was visited 9001 times.

Given an array of count-paired domains cpdomains, return an array of the count-paired domains of each subdomain in the input. You may return the answer in any order.

struct Domain {
    int visit;
    string domain;
    vector<int> pos;
};

class Solution {
    unordered_map<string, int> counts;

    Domain parse(string& s) {
        string v, domain, tmp;
        vector<int> pos{0};
        stringstream ss(s);
        getline(ss, v, ' ');
        while(getline(ss, tmp, '.')) {
            domain += tmp + '.';
            pos.push_back(domain.length());
        }
        domain.pop_back();
        pos.pop_back();


        return Domain {.visit = atoi(v.c_str()), .domain = domain, .pos = pos};
    }
public:
    vector<string> subdomainVisits(vector<string>& cpdomains) {
        vector<string> res;
        for(auto& cpdomain: cpdomains) {
            Domain d = parse(cpdomain);
            for(auto& p : d.pos) {
                counts[&d.domain[p]] += d.visit;
            }
        }
        transform(counts.begin(), counts.end(), back_inserter(res), [] (pair<const string, int>& p) {
            return to_string(p.second) + ' ' + p.first;
        });
        return res;
    }
};
Author: Song Hayoung
Link: https://songhayoung.github.io/2021/12/06/PS/LeetCode/subdomain-visit-count/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.