737. Sentence Similarity II

Given two sentences words1, words2 (each represented as an array of strings), and a list of similar word pairs pairs, determine if two sentences are similar.

For example, words1 = ["great", "acting", "skills"] and words2 = ["fine", "drama", "talent"] are similar, if the similar word pairs are pairs = [["great", "good"], ["fine", "good"], ["acting","drama"], ["skills","talent"]].

Note that the similarity relation is transitive. For example, if "great" and "good" are similar, and "fine" and "good" are similar, then "great" and "fine" are similar.

Similarity is also symmetric. For example, "great" and "fine" being similar is the same as "fine" and "great" being similar.

Also, a word is always similar with itself. For example, the sentences words1 = ["great"], words2 = ["great"], pairs = [] are similar, even though there are no specified similar word pairs.

Finally, sentences can only be similar if they have the same number of words. So a sentence like words1 = ["great"] can never be similar to words2 = ["doubleplus","good"].

Note:

  • The length of words1 and words2 will not exceed 1000.
  • The length of pairs will not exceed 2000.
  • The length of each pairs[i] will be 2.
  • The length of each words[i] and pairs[i][j] will be in the range [1, 20].

一刷
题解:用map<String, String>来实现union and find

class Solution {
    public boolean areSentencesSimilarTwo(String[] words1, String[] words2, String[][] pairs) {
        if(words1.length!=words2.length) return false;
        Map<String, String> map = new HashMap<>();
        for(String[] pair : pairs){
            String parent0 = find(pair[0], map);
            String parent1 = find(pair[1], map);
            if(!parent0.equals(parent1)) map.put(parent0, parent1);
        }
        int n = words1.length;
        for(int i=0; i<n; i++){
            if (!words1[i].equals(words2[i]) && !find(words1[i], map).equals(find(words2[i], map))) return false;
        }
        return true;
    }
    
    private String find(String word, Map<String, String> map){
        if(!map.containsKey(word)) return word;
        String str = word;
        while(map.containsKey(str)){
            str = map.get(str);
        }
        map.put(word, str);
        return str;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 13,503评论 0 23
  • 大概就是奶茶和巧克力的作用了,以至于啃完一章晦涩难懂的小说后,还清醒无余。 索性就躺在文字里吧。 想起从实习到现在...
    卿可见阅读 1,544评论 0 0
  • 1.学习张爱玲的外貌写作风格,写上一段 原文:果然,姚先生大大小小三个女儿,一个比一个美,说也奇怪,社会上流行着古...
    涤身阅读 2,571评论 1 1
  • 咖啡领回来的日子是2015年的清明节,这是一个不用浪费太多脑细胞就能记住的日子。给她取名叫做咖啡不只是因为她黑,要...
    郭润泽阅读 2,615评论 0 1
  • 汽车安全性能对大多数人来说是买车、用车的首要考虑因素,或主要的考虑因素之一。人们印象里会感觉欧系、美系比较坚固,日...
    徐建楼阅读 2,271评论 0 0

友情链接更多精彩内容