链接: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.子域名访问计数·哈希相关推荐

  1. LeetCode每日一题——811. 子域名访问计数

    LeetCode每日一题系列 题目:811. 子域名访问计数 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 网站域名 "discuss.leetcode. ...

  2. LeetCode 811. 子域名访问计数

    1. 题目 一个网站域名,如"discuss.leetcode.com",包含了多个子域名. 作为顶级域名,常用的有"com",下一级则有"leetc ...

  3. LeetCode Algorithm 811. 子域名访问计数

    Ideas 计数配对域名是由域名访问次数和域名组成的,那么对应域名的每一级域名都访问了相应次. 那么我们可以遍历计数配对域名组成的数组,对于每个计数配对域名,可以先把域名按照.分隔开,然后由一个总的计 ...

  4. LeetCode(811)——子域名访问计数(JavaScript)

    一个网站域名,如"discuss.leetcode.com",包含了多个子域名.作为顶级域名,常用的有"com",下一级则有"leetcode.com ...

  5. [Swift]LeetCode811. 子域名访问计数 | Subdomain Visit Count

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  6. Leetcode811.Subdomain Visit Count子域名访问计数

    一个网站域名,如"discuss.leetcode.com",包含了多个子域名.作为顶级域名,常用的有"com",下一级则有"leetcode.com ...

  7. Leetcode每日一题:204.count-primes(计数质数)

    思路:普通的做法肯定超时,这里介绍厄拉多塞筛法,非常适用于质数的题: 比如说求20以内质数的个数,首先0,1不是质数.2是第一个质数,然后把20以内所有2的倍数划去.2后面紧跟的数即为下一个质数3,然 ...

  8. LeetCode 每日一题 42. 接雨水 详细多种题解 C++描述

    LeetCode 每日一题 42. 接雨水 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,一起加油吧~ 难度 困难 2020.04.04每日一题 ...

  9. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

最新文章

  1. kangle php集成环境包,PHP探针-UPUPW环境集成包KANGLE专用版 | bftxjc.com contacts
  2. BAT集体告别中台上半场!接下来,中台怎么玩?
  3. Java笔试题二:读程序
  4. YII2框架的excel表格导出
  5. C++基类和派生类的构造函数(二)
  6. html table设置行高_html 表格单元格的宽度和高度的设置方法
  7. JVM之Java栈Java stack
  8. NOIP模拟测试16「Drink·blue·weed」
  9. 神舟笔记本bios_海尔雷神(蓝天)神舟战神游戏本风扇狂转掉电大写灯狂闪维修实例...
  10. 数据产品经理:6大数据分析平台的“世界观”
  11. 【jupyter notebook】开启远程服务 遇到No address associated with hostname
  12. Java面试题之 static执行顺序
  13. 技术复习-java类加载机制
  14. Delphi学习链接
  15. 关于 TCP协议和HTTP关系 | TCP的三次握手和四次挥手
  16. 免费的思维导图软件都有哪些?
  17. Adobe Flash Debugger 下载
  18. 谷歌宣布加入“反微软联盟”
  19. curl put请求
  20. 这样print才够劲!

热门文章

  1. 直播类软件的测试用例,直播类软件测试都包括哪些方面?测试工具都有哪些?...
  2. 18.C语言统计英文文章个数和大写首字母
  3. Revit结构构件之间的扣减问题及解决
  4. 【题解】Codeforces731D 80-th Level Archeology
  5. HTML <header> 标签
  6. 软件测试方案设计-模板
  7. 那些没考上大学的人,后来过的怎样
  8. echarts移动端设备屏幕尺寸的适配
  9. chrome 全屏无法退出
  10. 初识Dockerfile与实现容器间的数据同步