lifeiteng

737. Sentence Similarity II

Sep 12th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.15 KB | None | 0 0
  1. class Solution {
  2.     public boolean areSentencesSimilarTwo(String[] words1, String[] words2, String[][] pairs) {
  3.         int m = words1.length, n = words2.length;
  4.         if(m != n) return false;
  5.         Map<String, String> map = new HashMap<>();
  6.         for(String[] pair : pairs)
  7.         {
  8.             String u = pair[0], v = pair[1];
  9.             if(!map.containsKey(u)) map.put(u, u);
  10.             if(!map.containsKey(v)) map.put(v, v);
  11.             String pu = parent(u, map), pv = parent(v, map);
  12.             if(!pu.equals(pv)) map.put(pu, pv);
  13.         }
  14.         for(int i = 0; i < m; i++)
  15.         {
  16.             String u = words1[i], v = words2[i], pu = parent(u, map), pv = parent(v, map);
  17.             if(u.equals(v) || (pu != null && pv != null && pu.equals(pv))) continue;
  18.             if(pu == null || pv == null) return false;
  19.             return false;
  20.         }
  21.         return true;
  22.     }
  23.    
  24.     String parent(String str, Map<String, String> map)
  25.     {
  26.         if(!map.containsKey(str)) return null;
  27.         String p = map.get(str);
  28.         while(!p.equals(map.get(p))) p = map.get(p);
  29.         map.put(str, p);
  30.         return p;
  31.     }
  32. }
Add Comment
Please, Sign In to add comment