Advertisement
Guest User

Untitled

a guest
Nov 12th, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. class Solution {
  2. Map<String, List<String>> graph;
  3. Set<String> seen;
  4. public List<List<String>> accountsMerge(List<List<String>> accounts) {
  5.  
  6. graph = new HashMap<>();
  7. seen = new HashSet<>();
  8.  
  9. buildGraph(accounts);
  10.  
  11. Map<String, String> email_to_name = new HashMap<>();
  12. for (List<String> account:accounts) {
  13. String name = account.get(0);
  14. for (int i = 1; i < account.size(); ++i) {
  15. String email = account.get(i);
  16. email_to_name.put(email, name);
  17. }
  18. }
  19.  
  20. List<List<String>> ans = new ArrayList<>();
  21. for (String email:email_to_name.keySet()) {
  22. if (!seen.contains(email)) {
  23. List<String> comp = new ArrayList<>();
  24. dfs(email, comp);
  25. Collections.sort(comp);
  26. //System.out.println(comp.size());
  27. ans.add(new ArrayList());
  28. ans.get(ans.size()-1).add(email_to_name.get(email));
  29. ans.get(ans.size()-1).addAll(comp);
  30. }
  31. }
  32.  
  33. return ans;
  34. }
  35.  
  36. public void buildGraph(List<List<String>> accounts) {
  37. for (List<String> account:accounts) {
  38. if (account.size() == 2) {
  39. graph.computeIfAbsent(account.get(1),
  40. z -> new ArrayList());
  41. continue;
  42. }
  43.  
  44. for (int i = 1; i < account.size(); ++i)
  45. for (int j = i+1; j < account.size(); ++j) {
  46. graph.computeIfAbsent(account.get(i),
  47. z -> new ArrayList()).add(account.get(j));
  48. graph.computeIfAbsent(account.get(j),
  49. z -> new ArrayList()).add(account.get(i));
  50. }
  51. }
  52. }
  53.  
  54. public void dfs(String email, List<String> comp) {
  55. if (seen.contains(email))
  56. return;
  57. comp.add(email);
  58. seen.add(email);
  59.  
  60. for (String nei: graph.get(email)) {
  61. dfs(nei, comp);
  62. }
  63.  
  64. }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement