文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给定两个句子 words1, words2 (每个用字符串数组表示),和一个相似单词对的列表 pairs ,判断是否两个句子是相似的。

例如,当相似单词对是 pairs = [["great", "fine"], ["acting","drama"], ["skills","talent"]]的时候,words1 = ["great", "acting", "skills"]words2 = ["fine", "drama", "talent"] 是相似的。

注意相似关系是 具有 传递性的。
例如,如果 “great” 和 “fine” 是相似的,“fine” 和 “good” 是相似的,则 “great” 和 “good” 是相似的。

而且,相似关系是具有对称性的。
例如,“great” 和 “fine” 是相似的相当于 “fine” 和 “great” 是相似的。

并且,一个单词总是与其自身相似
例如,句子 words1 = [“great”], words2 = [“great”], pairs = [] 是相似的,尽管没有输入特定的相似单词对。

最后,句子只会在具有相同单词个数的前提下才会相似。
所以一个句子 words1 = [“great”] 永远不可能和句子 words2 = [“doubleplus”,“good”] 相似。

注:
words1 and words2 的长度不会超过 1000。
pairs 的长度不会超过 2000。
每个pairs[i] 的长度为 2。
每个 words[i] 和 pairs[i][j] 的长度范围为 [1, 20]。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sentence-similarity-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

数据结构–并查集(Disjoint-Set)

class dsu
{unordered_map<string,string> f;
public:dsu(unordered_set<string> &s){for(auto& w : s)f[w] = w;//并查集初始化}void merge(string& a, string& b){string fa = find(a);string fb = find(b);f[fa] = fb;}string find(string a){string origin = a;while(a != f[a])a = f[a];return f[origin] = a;}
};
class Solution {public:bool areSentencesSimilarTwo(vector<string>& words1, vector<string>& words2, vector<vector<string>>& pairs) {if(words1.size() != words2.size())return false;unordered_set<string> s;for(auto& p : pairs){s.insert(p[0]);s.insert(p[1]);}dsu u(s);//并查集for(auto& p : pairs)u.merge(p[0], p[1]);//mergefor(int i = 0; i < words1.size(); ++i){if(words1[i] == words2[i])continue;//并查集findif(u.find(words1[i]) != u.find(words2[i]))return false;}return true;}
};

480 ms 57 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 737. 句子相似性 II(并查集)相关推荐

  1. 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...

  2. LeetCode 684. 冗余连接(并查集)

    1. 题目 在本问题中, 树指的是一个连通且无环的无向图. 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, -, N) 的树及一条附加的边构成.附加的边的两个顶点包含在1到N中间,这条附 ...

  3. LeetCode 803. 打砖块(并查集)

    文章目录 1. 题目 2. 解题 1. 题目 有一个 m x n 的二元网格,其中 1 表示砖块,0 表示空白. 砖块 稳定(不会掉落)的前提是: 一块砖直接连接到网格的顶部,或者 至少有一块相邻(4 ...

  4. leetcode 765. 情侣牵手(并查集)

    N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 到 2N-1 的整 ...

  5. [Leetcode 每日精选](本周主题-并查集) 面试题 17.07. 婴儿名字

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题多了一些变化, 但核心仍然是并查集. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到该系列当前已 ...

  6. LeetCode 1813. 句子相似性 III

    文章目录 1. 题目 2. 解题 1. 题目 一个句子是由一些单词与它们之间的单个空格组成,且句子的开头和结尾没有多余空格. 比方说,"Hello World" ,"HE ...

  7. LeetCode 734. 句子相似性(哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给定两个句子 words1, words2 (每个用字符串数组表示),和一个相似单词对的列表 pairs ,判断是否两个句子是相似的. 例如,当相似单词对 ...

  8. leetcode 721. 账户合并(并查集)

    给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址 ...

  9. [leetcode] 839. 相似字符串组并查集

    class USF { public:int *parent;int *rank;int groupCount; //组数USF(int n){parent = new int[n];rank = n ...

最新文章

  1. java排序算法(冒泡,插入,选择,快速,堆,归并,希尔,基数)
  2. Oracle Advanced Security:Column Encryption Overhead
  3. java 502错误,Spring Boot连接超时导致502错误的实战案例
  4. 运维如何逆袭?月薪30K的牛逼运维需要的知识,全在这里了
  5. 使用 SAP UI5 CLI 命令行工具构建和运行 SAP UI5 应用
  6. 我敢打赌,99%的电子工程师都掉进过这29个坑!
  7. 大话设计模式笔记 享元模式
  8. AppDelegate的模块化+瘦身
  9. JDK 14 / JEP 305模式匹配“ Smart Casts”实例
  10. Linux TCP server系列(4)-浅谈listen与大并发TCP连接
  11. linux usb键盘驱动详解
  12. 简单触发器的使用 -- 献给SQL初学者
  13. html中展开的小箭头,HTML5 移动网页应用中的展开式标签(带上下指示箭头)
  14. 电动汽车仿真系列-基于动态规划的混合动力汽车能量管理
  15. 零基础学FPGA(二):FPGA生产厂家及产品(呕心沥血,小白如何选择板卡)
  16. 读者推荐 · 一个美观的简历生成器
  17. git squash 和 git rebase
  18. 自己组装nas服务器万兆,万兆网络、装M.2 SSD的NAS服务器
  19. Android app打开手机应用市场上对应的应用
  20. microsoft excel使用技巧和问题解决

热门文章

  1. 逻辑综合工具DesignCompiler使用教程
  2. 【Python基础入门系列】第09天:Python tuple
  3. 鼓励参与计算机考试宣传标语,诚信考试的宣传标语(精选60条)
  4. gcc、clang、make、cmake、makefile、CMakeLists.txt概念学习
  5. Python 快速入门
  6. 在Ubuntu下运行 apt-get update命令后出现错误:
  7. Android WebView常见问题及解决方案汇总【很全很实用】
  8. 项目管理中的沟通管理(转)
  9. canvas小程序-快跑程序员
  10. 【转】【Linux】linux awk命令详解