class Solution {
public:
vector<string> subdomainVisits(vector<string>& cpdomains) {
}
};
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
为域名本身。
"9001 discuss.leetcode.com"
就是一个 计数配对域名 ,表示 discuss.leetcode.com
被访问了 9001
次。给你一个 计数配对域名 组成的数组 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 次。
提示:
1 <= cpdomain.length <= 100
1 <= cpdomain[i].length <= 100
cpdomain[i]
会遵循 "repi d1i.d2i.d3i"
或 "repi d1i.d2i"
格式repi
是范围 [1, 104]
内的一个整数d1i
、d2i
和 d3i
由小写英文字母组成原站题解
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()]