LeetCode·每日一题·811.子域名访问计数·哈希
链接:https://leetcode.cn/problems/subdomain-visit-count/solution/-by-xun-ge-v-i3sb/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目
示例
思路
对于本题,题目其实已经说的非常清楚了,直接按题目意思模拟即可,但是在模拟过程中存在一个难点
- 那就是怎么保存每个子域名对应的 计数配对域名 ,其中还有对重复的进行去重
说到这里应该不难发现,对于保存子域名还要进行去重肯定是哈希表的强项,对于C语言也有很好的库函数实现->C语言库实现哈希表
具体实现
按照题意,我们对每一个字符串进行分解出对应的子域名,并入哈希表,加入存在两种情况:
- 如果之前存在相同的子域名
- 那么就将相同子域名出现的次数相加
- 如果之前不存在相同的子域名
- 那么就创建对应的键并加入哈希表
处理完字符串之后,遍历枚举哈希表中所有存在的键并进行保存即可
代码注释超级详细
代码
/*** Note: The returned array must be malloced, assume caller calls free().*/struct my_struct {//这里使用指针为键是很方便的,不需要再额外申请空间const char *name; /* key */int conut;UT_hash_handle hh; /* makes this structure hashable */
};char ** subdomainVisits(char ** cpdomains, int cpdomainsSize, int* returnSize){char ** str = (char **)malloc(sizeof(char *) * 300);*returnSize = 0;struct my_struct *s, *users = NULL;int conut;//初始化for(int i = 0; i < cpdomainsSize; i++)//遍历字符串{sscanf(cpdomains[i], "%d", &conut);//提取前面数字char * tmp = cpdomains[i];//利用指针方便后序操作while(*tmp != ' ') tmp++;//去除前面数字while(*tmp != '\0')//枚举所有子域名{tmp++;//这里很细节,需要仔细看,是用来去除 ' ' 和 '.'HASH_FIND_STR(users, tmp, s);//先判断是否存在相同子域名if(s){s->conut += conut;//存在,加出现次数}else//不存在,入哈希表{s = (struct my_struct *)malloc(sizeof(*s));s->name = tmp;s->conut = conut;HASH_ADD_KEYPTR(hh, users, s->name, strlen(s->name), s);}while(*tmp != '\0' && *tmp != '.') tmp++;//去除'.'前面的字符,下一个子域名} }for (s = users; s != NULL; s = s->hh.next) {//枚举哈希表中所有键并保存//printf("user id %d: name %s", s->conut, s->name);int len = strlen(s->name);str[(*returnSize)] = (char *)malloc(sizeof(char) * (len+10));sprintf(str[*returnSize], "%d %s", s->conut, s->name);//printf(": str %s\n",str[*returnSize]);(*returnSize)++;}//销毁哈希表/* free the hash table contents */struct my_struct * tmp;HASH_ITER(hh, users, s, tmp) {HASH_DEL(users, s);free(s);}return str;
}作者:xun-ge-v
链接:https://leetcode.cn/problems/subdomain-visit-count/solution/-by-xun-ge-v-i3sb/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
LeetCode·每日一题·811.子域名访问计数·哈希相关推荐
- LeetCode每日一题——811. 子域名访问计数
LeetCode每日一题系列 题目:811. 子域名访问计数 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 网站域名 "discuss.leetcode. ...
- LeetCode 811. 子域名访问计数
1. 题目 一个网站域名,如"discuss.leetcode.com",包含了多个子域名. 作为顶级域名,常用的有"com",下一级则有"leetc ...
- LeetCode Algorithm 811. 子域名访问计数
Ideas 计数配对域名是由域名访问次数和域名组成的,那么对应域名的每一级域名都访问了相应次. 那么我们可以遍历计数配对域名组成的数组,对于每个计数配对域名,可以先把域名按照.分隔开,然后由一个总的计 ...
- LeetCode(811)——子域名访问计数(JavaScript)
一个网站域名,如"discuss.leetcode.com",包含了多个子域名.作为顶级域名,常用的有"com",下一级则有"leetcode.com ...
- [Swift]LeetCode811. 子域名访问计数 | Subdomain Visit Count
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- Leetcode811.Subdomain Visit Count子域名访问计数
一个网站域名,如"discuss.leetcode.com",包含了多个子域名.作为顶级域名,常用的有"com",下一级则有"leetcode.com ...
- Leetcode每日一题:204.count-primes(计数质数)
思路:普通的做法肯定超时,这里介绍厄拉多塞筛法,非常适用于质数的题: 比如说求20以内质数的个数,首先0,1不是质数.2是第一个质数,然后把20以内所有2的倍数划去.2后面紧跟的数即为下一个质数3,然 ...
- LeetCode 每日一题 42. 接雨水 详细多种题解 C++描述
LeetCode 每日一题 42. 接雨水 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,一起加油吧~ 难度 困难 2020.04.04每日一题 ...
- leetcode每日刷题计划-简单篇day8
leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...
最新文章
- kangle php集成环境包,PHP探针-UPUPW环境集成包KANGLE专用版 | bftxjc.com contacts
- BAT集体告别中台上半场!接下来,中台怎么玩?
- Java笔试题二:读程序
- YII2框架的excel表格导出
- C++基类和派生类的构造函数(二)
- html table设置行高_html 表格单元格的宽度和高度的设置方法
- JVM之Java栈Java stack
- NOIP模拟测试16「Drink·blue·weed」
- 神舟笔记本bios_海尔雷神(蓝天)神舟战神游戏本风扇狂转掉电大写灯狂闪维修实例...
- 数据产品经理:6大数据分析平台的“世界观”
- 【jupyter notebook】开启远程服务 遇到No address associated with hostname
- Java面试题之 static执行顺序
- 技术复习-java类加载机制
- Delphi学习链接
- 关于 TCP协议和HTTP关系 | TCP的三次握手和四次挥手
- 免费的思维导图软件都有哪些?
- Adobe Flash Debugger 下载
- 谷歌宣布加入“反微软联盟”
- curl put请求
- 这样print才够劲!