1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| public boolean areSentencesSimilarTwo(String[] sentence1, String[] sentence2, List<List<String>> similarPairs) { int n=sentence1.length; if(n!= sentence2.length){ return false; } Map<String, List<String>> map=new HashMap<>(); for (List<String> similarPair : similarPairs) { String a=similarPair.get(0); String b=similarPair.get(1); map.putIfAbsent(a,new LinkedList<>()); map.get(a).add(b); map.putIfAbsent(b,new LinkedList<>()); map.get(b).add(a); } Deque<String> q=new LinkedList<>(); Set<String> visited=new HashSet<>(); for (int i = 0; i < n; i++) { String s1=sentence1[i]; String s2=sentence2[i]; if(s1.equals(s2)){ continue; } q.clear(); visited.clear(); q.offer(s1); boolean found=false; while(!q.isEmpty()){ String cur=q.poll(); if(cur.equals(s2)){ found=true; break; } if(map.containsKey(cur)){ for (String next : map.get(cur)) { if(!visited.contains(next)){ q.offer(next); visited.add(next); } } } } if(!found){ return false; } } return true; }
|