-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path811-SubdomainVisitCount.go
More file actions
74 lines (65 loc) · 3.83 KB
/
811-SubdomainVisitCount.go
File metadata and controls
74 lines (65 loc) · 3.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main
// 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.
// Example 1:
// Input: cpdomains = ["9001 discuss.leetcode.com"]
// Output: ["9001 leetcode.com","9001 discuss.leetcode.com","9001 com"]
// Explanation: We only have one website domain: "discuss.leetcode.com".
// As discussed above, the subdomain "leetcode.com" and "com" will also be visited. So they will all be visited 9001 times.
// Example 2:
// Input: cpdomains = ["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]
// Output: ["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"]
// Explanation: We will visit "google.mail.com" 900 times, "yahoo.com" 50 times, "intel.mail.com" once and "wiki.org" 5 times.
// For the subdomains, we will visit "mail.com" 900 + 1 = 901 times, "com" 900 + 50 + 1 = 951 times, and "org" 5 times.
// Constraints:
// 1 <= cpdomain.length <= 100
// 1 <= cpdomain[i].length <= 100
// cpdomain[i] follows either the "repi d1i.d2i.d3i" format or the "repi d1i.d2i" format.
// repi is an integer in the range [1, 10^4].
// d1i, d2i, and d3i consist of lowercase English letters.
import "fmt"
import "strconv"
func subdomainVisits(cpdomains []string) []string {
res, mp, n, s := []string{}, make(map[string]int), 0, ""
for _, domain := range cpdomains {
for i, v := range domain {
if v == ' ' { // "9001 discuss.leetcode.com" 分开 计数 域名
n, _ = strconv.Atoi(domain[:i])
s = domain[i+1:]
}
}
mp[s] += n // 整域名
for i, v := range s {
ts := ""
if v == '.' { // 分解域名
ts = s[i+1:]
mp[ts] += n
}
}
}
for k, v := range mp {
res = append(res, strconv.Itoa(v) + " " + k)
}
return res
}
func main() {
// Example 1:
// Input: cpdomains = ["9001 discuss.leetcode.com"]
// Output: ["9001 leetcode.com","9001 discuss.leetcode.com","9001 com"]
// Explanation: We only have one website domain: "discuss.leetcode.com".
// As discussed above, the subdomain "leetcode.com" and "com" will also be visited. So they will all be visited 9001 times.
fmt.Println(subdomainVisits([]string{"9001 discuss.leetcode.com"})) // ["9001 leetcode.com","9001 discuss.leetcode.com","9001 com"]
// Example 2:
// Input: cpdomains = ["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]
// Output: ["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"]
// Explanation: We will visit "google.mail.com" 900 times, "yahoo.com" 50 times, "intel.mail.com" once and "wiki.org" 5 times.
// For the subdomains, we will visit "mail.com" 900 + 1 = 901 times, "com" 900 + 50 + 1 = 951 times, and "org" 5 times.
fmt.Println(subdomainVisits([]string{"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"]
}