class Solution {
Map<String,String> unionMap = new HashMap<String,String>();//并查集
Map<String,Integer> rootFrequency = new HashMap<String,Integer>();
public String[] trulyMostPopular(String[] names, String[] synonyms) {
for(int i =0;i<names.length;i++){
String name = names[i];
String[] strs = name.substring(0,name.length() - 1).split("\\(");
unionMap.put(strs[0],strs[0]);
// nameFrequency.put(strs[0],Integer.parseInt(strs[1]));
}
for(int i=0;i<synonyms.length;i++){
String synonym = synonyms[i].substring(1,synonyms[i].length()-1);
String[] strs = synonym.split(",");
if(unionMap.get(strs[0]) ==null)
unionMap.put(strs[0],strs[0]);
if(unionMap.get(strs[1]) ==null)
unionMap.put(strs[1],strs[1]);
String root1 = findRoot(strs[0]);
String root2 = findRoot(strs[1]);
if(root1.equals(root2)== false)//祖先不相同
{
if(root1.compareTo(root2) > 0)
unionMap.put(root1,root2);
else
unionMap.put(root2,root1);
}
}
for(int i =0;i<names.length;i++){
String name = names[i];
String[] strs = name.substring(0,name.length() - 1).split("\\(");
String root = findRoot(strs[0]);
rootFrequency.put(root,rootFrequency.getOrDefault(root,0) + Integer.parseInt(strs[1]));
}
List<String> res = new ArrayList<String>();
for (Map.Entry<String, Integer> entry : rootFrequency.entrySet()) {
String str = entry.getKey() +"(" + entry.getValue() +")";
res.add(str);
}
return res.toArray(new String[res.size()]);
}
public String findRoot(String name){
if(unionMap.get(name).equals(name))
return name;
else
return findRoot(unionMap.get(name));
}
}
LeetCode 面试题 17.07. 婴儿名字
最新推荐文章于 2022-02-12 19:37:24 发布