[LeetCode] Subdomain Visit Count 子域名访问量统计
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
cpdomainswill not exceed100. - 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.
这道题让我们统计子域名的访问量,所谓的子域名,就是一个完整的域名以点断开的,每个断开的地方到末尾之间的子字符串就是一个子域名,现在给了我们很多完整域名的访问量,让我们统计所有子域名的访问量,题目中给的例子很好的说明了问题。那么这种统计字符串出现个数的问题,我们应该不难想到需要用一个HashMap来建立字符串和其出现次数的映射。那么接下来要做的就是将每一个全域名提取出来,然后拆分成子域名。提取全域名操作不难,因为给的格式都是一样的,前面是数字,中间一个空格,后面是全域名。我们只需要找到空格的位置,前面的部分转为整型数cnt,后面的就是全域名了。取出全域名之后就要进行拆分成子域名了,我们可以进行遍历,每当找到小数点的位置时,将后面的子字符串的映射值增加cnt,以此类推直到拆完所有的子域名。注意之前的全域名的映射值别忘了也要加上cnt,最后的最后我们只要将HashMap中的映射对组成题目中要求返回的格式即可,参见代码如下:
解法一:
class Solution {
public:
vector<string> subdomainVisits(vector<string>& cpdomains) {
vector<string> res;
unordered_map<string, int> subdomainCnt;
for (string cpdomain : cpdomains) {
int spaceIdx = cpdomain.find(" ");
int cnt = stoi(cpdomain.substr(, spaceIdx));
string rem = cpdomain.substr(spaceIdx + );
for (int i = ; i < rem.size(); ++i) {
if (rem[i] == '.') {
subdomainCnt[rem.substr(i + )] += cnt;
}
}
subdomainCnt[rem] += cnt;
}
for (auto a : subdomainCnt) {
res.push_back(to_string(a.second) + " " + a.first);
}
return res;
}
};
下面这种解法和上面的基本相同,唯一改变的地方就是拆分子域名的时候,没用使用遍历的for循环,而是继续使用了find函数来查找下一个小数点的位置,参见代码如下:
解法二:
class Solution {
public:
vector<string> subdomainVisits(vector<string>& cpdomains) {
vector<string> res;
unordered_map<string, int> subdomainCnt;
for (string cpdomain : cpdomains) {
int spaceIdx = cpdomain.find(" ");
int cnt = stoi(cpdomain.substr(, spaceIdx));
while (spaceIdx != string::npos) {
subdomainCnt[cpdomain.substr(spaceIdx + )] += cnt;
spaceIdx = cpdomain.find('.', spaceIdx + );
}
}
for (auto a : subdomainCnt) {
res.push_back(to_string(a.second) + " " + a.first);
}
return res;
}
};
参考资料:
https://leetcode.com/problems/subdomain-visit-count/solution/
https://leetcode.com/problems/subdomain-visit-count/discuss/157942/C++-concise-solution
LeetCode All in One 题目讲解汇总(持续更新中...)
[LeetCode] Subdomain Visit Count 子域名访问量统计的更多相关文章
- LeetCode 811. Subdomain Visit Count (子域名访问计数)
题目标签:HashMap 题目给了我们一组域名,让我们把每一个域名,包括它的子域名,计数. 遍历每一个域名,取得它的计数,然后把它的所有子域名和它自己,存入hashmap,域名作为key,计数作为va ...
- Leetcode811.Subdomain Visit Count子域名访问计数
一个网站域名,如"discuss.leetcode.com",包含了多个子域名.作为顶级域名,常用的有"com",下一级则有"leetcode.com ...
- 811. Subdomain Visit Count - LeetCode
Question 811. Subdomain Visit Count Example 1: Input: ["9001 discuss.leetcode.com"] Output ...
- 【Leetcode_easy】811. Subdomain Visit Count
problem 811. Subdomain Visit Count solution: class Solution { public: vector<string> subdomain ...
- C#LeetCode刷题之#811-子域名访问计数(Subdomain Visit Count)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3814 访问. 一个网站域名,如"discuss.lee ...
- [Swift]LeetCode811. 子域名访问计数 | Subdomain Visit Count
A website domain like "discuss.leetcode.com" consists of various subdomains. At the top le ...
- LeetCode 811 Subdomain Visit Count 解题报告
题目要求 A website domain like "discuss.leetcode.com" consists of various subdomains. At the t ...
- 【LeetCode】811. Subdomain Visit Count 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典统计次数 日期 题目地址:https://lee ...
- LeetCode算法题-Subdomain Visit Count(Java实现)
这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...
随机推荐
- NOI-OJ 1.13 ID:23 区间内的真素数
整体思路 这里需要大量使用素数,必须能够想到只求出M到N之间的素数是不够的,因为M到N之间数字的反序有可能是大于M或小于N的数字,例如M=2,N=20,那么19的反序91大于20,所以使用埃拉拖色尼算 ...
- sublime 浏览器快捷键设置
之前每次忘掉在哪打开,这次认真记一下 菜单栏Preferences-->Package Settings-->Side Bar-->Key Binding-Users [ // ch ...
- 残差网络ResNet笔记
发现博客园也可以支持Markdown,就把我之前写的博客搬过来了- 欢迎转载,请注明出处:http://www.cnblogs.com/alanma/p/6877166.html 下面是正文: Dee ...
- pythonのdjango连接MYSQL
在py3.*中利用django使用mysql时,会出现一些问题.由于django默认的是 MySQLdb,但MySQLdb目前不支持py3.*所以我们要改用pymysql,首先要安装pymysql,命 ...
- WebService - 术语介绍
一.WebService是什么? 1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据) 2. 一个跨语言.跨平台的规范(抽象) 3. 多个跨平台.跨语言的应用间通信整合的方案(实际 ...
- Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
安装了mysql5.7.19后,执行语句中只要含有group by 就会报这个错 [Err] 1055 - Expression #1 of ORDER BY clause is not in GRO ...
- webpack dev-server 允许移动端调试
"dev": "cross-env NODE_ENV=development webpack-dev-server --host 0.0.0.0 --open --hot ...
- 提升Tesseract-OCR输出的质量
图片处理 修改比例(Rescaling) 二值化(Binarisation) 去除噪点(Noise Removal) 旋转/偏移校正(Rotation / Deskewing) 边界(Borders) ...
- saltstack 入门
1.Saltstack是什么? saltstack 是一个异构平台基础设施管理工具,具有远程执行.配置管理.云管理.只需花费数分钟就可以运行起来,扩展性足以支撑上万台服务器,速度快,服务器之间秒级通讯 ...
- [Linux]ln -al输出内容解析
第一项的第一位是文件类型:-: 表示普通文件d: 目录b: 块特殊文件c: 字符特殊文件l: 符号链接文件p: 命名管道文件FIFOs: 套接字文件 第二项是该文件的inode的链接计数,即stat ...