面试题 17.07. 婴儿名字

每年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量。有些名字有多种拼法,例如,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

方法1:并查集

public String[] trulyMostPopular(String[] names, String[] synonyms) {UnionFind uf = new UnionFind();for (String name : names) {String x = name.substring(0, name.indexOf("("));Integer cnt = Integer.valueOf(name.substring(name.indexOf("(") + 1, name.indexOf(")")));uf.parents.put(x, x);uf.size.put(x, cnt);}for (String syn : synonyms) {String u = syn.substring(1, syn.indexOf(","));String v = syn.substring(syn.indexOf(",") + 1, syn.indexOf(")"));if (!uf.parents.containsKey(u)) {//需要处理不存在的,并初始化sizeuf.parents.put(u, u);uf.size.put(u, 0);}if (!uf.parents.containsKey(v)) {uf.parents.put(v, v);uf.size.put(v, 0);}uf.union(u, v);}List<String> res = new ArrayList<>();for (String name : names) {String x = name.substring(0, name.indexOf("("));String rootX = uf.find(x);if (x.equals(rootX)) {res.add(x + "(" + uf.getSize(x) + ")");}}return res.toArray(new String[res.size()]);
}class UnionFind {Map<String, String> parents;//当前节点的父节点Map<String, Integer> size;//当前节点的人数public UnionFind() {parents = new HashMap<>();size = new HashMap<>();}//找到x的根节点public String find(String x) {if (!x.equals(parents.get(x))) {parents.put(x, find(parents.get(x)));}return parents.get(x);}public boolean union(String x, String y) {String rootX = find(x), rootY = find(y);if (rootX.equals(rootY)) return false;//字典序小的做根if (rootX.compareTo(rootY) > 0) {//rootY的字典序小parents.put(rootX, rootY);size.put(rootY, size.get(rootX) + size.get(rootY));} else {parents.put(rootY, rootX);size.put(rootX, size.get(rootY) + size.get(rootX));}return true;}/*** 返回x对应的根节点包含的人数*/public int getSize(String x) {String rootX = find(x);return size.get(rootX);}}

面试题 17.07. 婴儿名字相关推荐

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

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

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

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

  3. 并查集之面试题 17.07. 婴儿名字

    并查集之面试题 17.07. 婴儿名字 前言 一, 面试题 17.07. 婴儿名字 二,解题思路 1, a和b是朋友, b和c是朋友,那a和c也是朋友.这就是典型并查集类型 2, 字典序 3, 三, ...

  4. 面试题 17.07. 婴儿名字 ( 字符标志 并查集 )

    面试题 17.07. 婴儿名字 字符串并查集: 721. 账户合并 ( 并查集 ) 解题思路: 首先通过哈希表建立并查集,哈希表的键值对都是字符串,然后将一个相连的并查集合并: 利用一个哈希表进行计数 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 引用-ZIGBEE-ZSTACK网络配置相关问题
  2. 《自然》:欧洲根据已知基因序列合成新冠病毒,助力疫苗开发
  3. C# 笔记 获取程序当前目录
  4. 建立数据库时连接出错_PHP的福音!支持多数据库连接,高性能的开源MySQL连接池...
  5. DataTable 转为ListT集合
  6. java字符串底层实现_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...
  7. QT [004] QT SDK 和 QT quick 和 QT creator的区别历史和沿袭
  8. Mac zsh: command not found zsh 所有命令在终端失效
  9. 定了!这些高校已公布开学时间
  10. liferay6连接mysql_Liferay 6开发学习(二十六):数据库连接相关问题
  11. c#如何调用php接口方法参数类型,c# – .NET:使用通用接口参数调用Assembly obj的GetInterface方法...
  12. R语言基于ggplot绘制多条ROC曲线
  13. Windows 10无线网连不上怎么办-旧时光 oldtimeblog
  14. SUCTF_2019部分题解复现
  15. “黑产“识别算法(社区检测,相似度,关联关系)
  16. 异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例53
  17. Kotlin高仿微信-第58篇-开通VIP
  18. Visual and Object Geo-localization: A Comprehensive Survey
  19. Win32游戏制作之---Bizzard
  20. SpringCloud服务之间调用,报异常Method has too many Body parameters: public abstract

热门文章

  1. python正则表达式-RE模块
  2. 简单学习函数sum用法
  3. 阿里云注册账号、实名认证、领取优惠券、购买云服务器流程
  4. lisp自动生成界址点表_南方CASS,生成界址点程序,感觉自带的不好用。
  5. jQuery中的slideToggle( )方法和toggleClass( )方法的使用示例
  6. 攻防世界----工业协议分析2
  7. LeetCode打卡19
  8. js基础 全局变量和局部变量的理解
  9. 系统集成项目管理工程师(系统集成基础知识)
  10. poi 操作excel 自动换行