年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量。有些名字有多种拼法,例如,John 和 Jon 本质上是相同的名字,但被当成了两个名字公布出来。给定两个列表,一个是名字及对应的频率,另一个是本质相同的名字对。设计一个算法打印出每个真实名字的实际频率。注意,如果 John 和 Jon 是相同的,并且 Jon 和 Johnny 相同,则 John 与 Johnny 也相同,即它们有传递和对称性。在结果列表中,选择字典序最小的名字作为真实名字。示例:输入:names = ["John(15)","Jon(12)","Chris(13)","Kris(4)","Christopher(19)"], synonyms = ["(Jon,John)","(John,Johnny)","(Chris,Kris)","(Chris,Christopher)"]
输出:["John(27)","Chris(36)"]
提示:names.length <= 100000

一、图
同一组的名字用连在一起

from collections import defaultdict
class UnionFind(object):def __init__(self, names):self.parent = {}for name in names:self.parent[name] = namedef union(self, a, b):if a not in self.parent or b not in self.parent:return root_a = self.find_root(a)root_b = self.find_root(b)if root_a < root_b:self.parent[root_b] = root_aelse:self.parent[root_a] = root_bdef find_root(self, node):while node != self.parent[node]:self.parent[node] = self.parent[self.parent[node]]node = self.parent[node]return nodeclass Solution(object):def trulyMostPopular(self, names: List[str], synonyms: List[str]) -> List[str]:name_map = defaultdict(int)for name_freq in names:name, freq = (part.strip().strip(')') for part in name_freq.split('('))name_map[name] = int(freq)#初始化uf = UnionFind(name_map.keys())for name_pairs in synonyms:a, b = (name.strip().strip(')').strip('(') for name in name_pairs.split(','))uf.union(a,b)ans = []ans_map = defaultdict(int)for name, freq in name_map.items():ans_map[uf.find_root(name)] += freqfor name, freq in ans_map.items():ans.append('{}({})'.format(name, freq))return ans

【python】: 婴儿名字相关推荐

  1. 面试题 17.07. 婴儿名字 总结

    1.Set() ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值.类似于python中的元组. 2.forEach()方法 forEach() 方法用于调用数组的 ...

  2. leetcode面试题 17.07. 婴儿名字(并查集)

    每年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量.有些名字有多种拼法,例如,John 和 Jon 本质上是相同的名字,但被当成了两个名字公布出来.给定两个列表,一个是名字 ...

  3. 程序员面试金典 - 面试题 17.07. 婴儿名字(并查集)

    1. 题目 每年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量. 有些名字有多种拼法,例如,John 和 Jon 本质上是相同的名字,但被当成了两个名字公布出来. 给定两个 ...

  4. python的名字空间(namespace)与作用域(scope)

    名字空间(namespace) 1).名字(name)与对象(object) 对象:对象一块存储区域,用来存储值,同时包含对该值所支持的一系列方法,也包含一系列属性. 名字:每个名字对应一个对象,多个 ...

  5. 程序员面试金典 - 面试题 17.07. 婴儿名字

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 每年,政府都会公布一万个最常见的婴 ...

  6. [Leetcode 每日精选](本周主题-并查集) 面试题 17.07. 婴儿名字

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题多了一些变化, 但核心仍然是并查集. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到该系列当前已 ...

  7. [LeetCode][C++]面试题 17.07. 婴儿名字/并查集

    面试题 17.07. 婴儿名字 每年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量.有些名字有多种拼法,例如,John 和 Jon 本质上是相同的名字,但被当成了两个名字公 ...

  8. 【并查集】面试题 17.07. 婴儿名字

    题目 每年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量.有些名字有多种拼法,例如,John 和 Jon 本质上是相同的名字,但被当成了两个名字公布出来.给定两个列表,一个 ...

  9. 面试题.17.07.婴儿名字--并查集

    LeetCode 面试题 17.07.婴儿名字 每年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量.有些名字有多种拼法,例如,John 和 Jon 本质上是相同的名字,但被 ...

最新文章

  1. 入门 | 无人驾驶汽车系统基本框架梳理
  2. 静态资源java 配置文件_java web 静态资源访问配置三种方式
  3. python123平台作业答案第十二周_【2018年 网鼎杯CTF 第二场】红日安全-网鼎杯WriteUp(24日 更新:web详解)...
  4. boost::safe_numerics模块测试对文字的 constexpr 操作
  5. php配置xdebug调试
  6. 开发中 MySQL 规范
  7. P1401 城市(30分,正解网络流)
  8. MNS消息服务计费处理参考
  9. SAP自学指南:案例公司的需求分析
  10. FFmpeg和WebRTC
  11. CLR中的程序集加载
  12. mysql使用sql脚本建立数据库
  13. Windows 98 SE
  14. 【056】历史性突破!翼辉信息助力星际荣耀火箭入轨!
  15. 2022N1叉车司机考试练习题及在线模拟考试
  16. 解析DeDecms系统的SEO内部优化技巧
  17. 我的大学 --- 郭天祥【4】
  18. 解决在谷歌浏览器上倍速播放视频适用B站 慕课MOOC 百度网盘(弃用) 谷歌内置播放器最高16倍速
  19. 2年Java开发工作经验面试总结
  20. 基础的拉普拉斯金字塔融合用于改善图像增强中易出现的过增强问题(一)

热门文章

  1. ubuntu 解决ab压力测试报错apr_socket_recv: Connection reset by peer (104)问题
  2. 卷积神经网络 手写数字识别(包含Pytorch实现代码)
  3. JavaScript DOM 编程艺术 (第二版)学习之5-6章
  4. 10.马赛克原理之简单提高图像算法性能(颜色空间缩减和计时函数) --- OpenCV从零开始到图像(人脸 + 物体)识别系列
  5. 第三代酷睿i3处理器_中秋国庆同天百年罕见 十代酷睿轻薄本助力出行
  6. 建立简单的数据库步骤
  7. 当代大学生内卷行为大赏
  8. SQL Server 2014 数据库误删数据的恢复处理
  9. 获得店铺所有商品 API(店铺商品列表、店铺商品)
  10. 天猫魔盒变形金刚5限定版预售 颜值担当IN压群雄