LeetCode 737. 句子相似性 II(并查集)
文章目录
- 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(并查集)相关推荐
- 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈
题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...
- LeetCode 684. 冗余连接(并查集)
1. 题目 在本问题中, 树指的是一个连通且无环的无向图. 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, -, N) 的树及一条附加的边构成.附加的边的两个顶点包含在1到N中间,这条附 ...
- LeetCode 803. 打砖块(并查集)
文章目录 1. 题目 2. 解题 1. 题目 有一个 m x n 的二元网格,其中 1 表示砖块,0 表示空白. 砖块 稳定(不会掉落)的前提是: 一块砖直接连接到网格的顶部,或者 至少有一块相邻(4 ...
- leetcode 765. 情侣牵手(并查集)
N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 到 2N-1 的整 ...
- [Leetcode 每日精选](本周主题-并查集) 面试题 17.07. 婴儿名字
题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题多了一些变化, 但核心仍然是并查集. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到该系列当前已 ...
- LeetCode 1813. 句子相似性 III
文章目录 1. 题目 2. 解题 1. 题目 一个句子是由一些单词与它们之间的单个空格组成,且句子的开头和结尾没有多余空格. 比方说,"Hello World" ,"HE ...
- LeetCode 734. 句子相似性(哈希)
文章目录 1. 题目 2. 解题 1. 题目 给定两个句子 words1, words2 (每个用字符串数组表示),和一个相似单词对的列表 pairs ,判断是否两个句子是相似的. 例如,当相似单词对 ...
- leetcode 721. 账户合并(并查集)
给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址 ...
- [leetcode] 839. 相似字符串组并查集
class USF { public:int *parent;int *rank;int groupCount; //组数USF(int n){parent = new int[n];rank = n ...
最新文章
- java排序算法(冒泡,插入,选择,快速,堆,归并,希尔,基数)
- Oracle Advanced Security:Column Encryption Overhead
- java 502错误,Spring Boot连接超时导致502错误的实战案例
- 运维如何逆袭?月薪30K的牛逼运维需要的知识,全在这里了
- 使用 SAP UI5 CLI 命令行工具构建和运行 SAP UI5 应用
- 我敢打赌,99%的电子工程师都掉进过这29个坑!
- 大话设计模式笔记 享元模式
- AppDelegate的模块化+瘦身
- JDK 14 / JEP 305模式匹配“ Smart Casts”实例
- Linux TCP server系列(4)-浅谈listen与大并发TCP连接
- linux usb键盘驱动详解
- 简单触发器的使用 -- 献给SQL初学者
- html中展开的小箭头,HTML5 移动网页应用中的展开式标签(带上下指示箭头)
- 电动汽车仿真系列-基于动态规划的混合动力汽车能量管理
- 零基础学FPGA(二):FPGA生产厂家及产品(呕心沥血,小白如何选择板卡)
- 读者推荐 · 一个美观的简历生成器
- git squash 和 git rebase
- 自己组装nas服务器万兆,万兆网络、装M.2 SSD的NAS服务器
- Android app打开手机应用市场上对应的应用
- microsoft excel使用技巧和问题解决