算法:并查集:返回并查集中各个字典序最小的root
面试题 17.07. 婴儿名字 - 力扣(LeetCode)
1、构建HashMap<String,String> chToPa:表示子对象—>父对象;
2、遍历String[] synonyms,str11与str12两对象相连
3、通过while(chToPa.containsKey(str11)) str11 = chToPa.get(str11),找到两个str对应的root1与root2
4、通过root1.compareTo(root2):比较两个root1,小于是父root,大的是子root
5、chToPa存入(子,父)
HashMap<String,String> chToPa = new HashMap<>();
for(String pair : synonyms){
int index = pair.indexOf(',');
String name1 = pair.substring(1,index);
String name2 = pair.substring(index + 1,pair.length() - 1);
while(chToPa.containsKey(name1)){
name1 = chToPa.get(name1);
}
while(chToPa.containsKey(name2)){
name2 = chToPa.get(name2);
}
if(!name1.equals(name2)){
int freque = nameTofreque.getOrDefault(name1,0) + nameTofreque.getOrDefault(name2,0);
String parent = name1.compareTo(name2) < 0?name1: name2;
String child = name1.compareTo(name2) < 0?name2 : name1;
chToPa.put(child,parent);
nameTofreque.put(parent,freque);
nameTofreque.remove(child);
}
}