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

答案:

class Solution {public String[] trulyMostPopular(String[] names, String[] synonyms) {//用hashmap表存频率,字典序就是按顺序一次比较每个字符大小Map<String, Integer> map = new HashMap<>();Map<String, String> nmap = new HashMap<>();//统计频率for(String name : names){int index1 = name.indexOf('('), index2 = name.indexOf(')');map.put(name.substring(0, index1), Integer.parseInt(name.substring(index1 + 1, index2)));//System.out.println(name.substring(0, index1) + " " + Integer.parseInt(name.substring(index1 + 1, index2)));}//字典序小的在后,大的都在前for(String name : synonyms){int index = name.indexOf(','), i = 0;String str1 = name.substring(1, index), str2 = name.substring(index + 1, name.length() - 1);while (nmap.containsKey(str1)) {   //找str1祖宗str1 = nmap.get(str1);}while (nmap.containsKey(str2)) {   //找str2祖宗str2 = nmap.get(str2);}if(!str1.equals(str2)){   //祖宗不同,要合并int frequency = map.getOrDefault(str1, 0) + map.getOrDefault(str2, 0);    //出现次数是两者之和String trulyName = str1.compareTo(str2) < 0 ? str1 : str2;String nickName = str1.compareTo(str2) < 0 ? str2 : str1;nmap.put(nickName, trulyName);      //小名作为大名的分支,即大名是小名的祖宗map.remove(nickName);       //更新一下数据map.put(trulyName, frequency);}}int i = 0;String[] strs = new String[map.size()];for(String name : map.keySet()){StringBuffer sb = new StringBuffer(name);sb.append("(");sb.append(map.get(name));sb.append(")");strs[i++] = sb.toString();}  return strs;}
}

【面试题】 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. 面试题 17.07. 婴儿名字

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 有个程序员老公有多爽???
  2. 如何使用adb命令发送keyevent
  3. 解读JavaScript代码 var ie = !-[1,]
  4. python中name没有定义_Python;NameError:未定义名称“handsum”
  5. koa cookie使用
  6. js判断fck编辑器内容是否为空并获得焦点
  7. 2、python机器学习基础教程——K近邻算法鸢尾花分类
  8. ionic 签名、打包
  9. 【ArcGIS微课1000例】0018:ArcGIS设置相对路径和数据源
  10. C++ 高级数据类型(六)—— 自定义数据类型
  11. 如何将10元店,做到月2000万流水?
  12. linux中网络编程1
  13. SpringBoot 精通系列-如何优雅地使用Mybatis的XML配置
  14. 表空间自动报警存储过程
  15. outlook qr码在哪里_优势对比:阜阳洋葱店邀请码
  16. 走向ASP.NET架构设计--第一章:走向设计
  17. NLP --- 隐马尔可夫HMM(EM算法(期望最大化算法))
  18. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---15
  19. JDK源码——源码学习总结与分析
  20. 彼得林奇:全球理财师中的NO.1

热门文章

  1. WordPress自动检测文章是否被百度收录 - 无须插件,一个函数实现
  2. Adobe Photoshop 2020 新建菜单频繁闪烁 Mac版
  3. win10小课堂:双屏显示设置教程
  4. 用matlab画烟火_用烟花制作拼贴
  5. c语言strcopy例子,C语言习题选讲:7.15和10.7 strcopy( )的实现
  6. 网工常用Linux网络命令
  7. uikeycommand如何添加键盘快捷键可加快工作流程
  8. 面试常败给微服务?我总结了一套核心资料三天肝完……
  9. 骁龙865与鸿蒙900,骁龙865处理器参数公布,性能实在太吓人了,麒麟990真比不上它!...
  10. 选品推荐|shopee|lazada泰国热销的5大品类