-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path811.subdomain-visit-count.cpp
More file actions
123 lines (112 loc) · 3.62 KB
/
811.subdomain-visit-count.cpp
File metadata and controls
123 lines (112 loc) · 3.62 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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <vector>
using std::vector;
#include <string>
using std::string;
#include <sstream>
using std::istringstream;
#include <unordered_map>
using std::unordered_map;
/*
* @lc app=leetcode id=811 lang=cpp
*
* [811] Subdomain Visit Count
*
* https://leetcode.com/problems/subdomain-visit-count/description/
*
* algorithms
* Easy (69.13%)
* Likes: 477
* Dislikes: 628
* Total Accepted: 83.9K
* Total Submissions: 121.1K
* Testcase Example: '["9001 discuss.leetcode.com"]'
*
* A website domain like "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.
*
* Now, call a "count-paired domain" to be a count (representing the number of
* visits this domain received), followed by a space, followed by the address.
* An example of a count-paired domain might be "9001 discuss.leetcode.com".
*
* We are given a list cpdomains of count-paired domains. We would like a list
* of count-paired domains, (in the same format as the input, and in any
* order), that explicitly counts the number of visits to each subdomain.
*
*
* Example 1:
* Input:
* ["9001 discuss.leetcode.com"]
* Output:
* ["9001 discuss.leetcode.com", "9001 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:
* ["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.
*
*
*
* Notes:
*
*
* The length of cpdomains will not exceed 100.
* The length of each domain name will not exceed 100.
* Each address will have either 1 or 2 "." characters.
* The input count in any count-paired domain will not exceed 10000.
* The answer output can be returned in any order.
*
*
*/
// @lc code=start
class Solution {
public:
vector<string> subdomainVisits(vector<string>& cpdomains) {
unordered_map<string, int> domainCount;
string countStr;
string domain;
for (auto& cpdomain : cpdomains) {
istringstream domainInput(cpdomain);
domainInput >> countStr;
int count = std::stoi(countStr);
domainInput >> domain;
while (domain.find('.') != string::npos) {
if (domainCount.find(domain) != domainCount.end()) {
domainCount[domain] += count;
} else {
domainCount.emplace(domain, count);
}
domain = domain.substr(domain.find('.') + 1);
}
if (domainCount.find(domain) != domainCount.end()) {
domainCount[domain] += count;
} else {
domainCount.emplace(domain, count);
}
}
vector<string> ans;
for (auto countPair : domainCount) {
string res;
res += std::to_string(countPair.second) + " " + countPair.first;
ans.push_back(res);
}
return ans;
}
};
// @lc code=end