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 ...
最新文章
- torch.nn.LogSoftmax()与输入具有相同尺寸和形状的张量,其值在[-inf,0)范围内
- 国内唯一ACL最佳论文得主冯洋:冲击最佳论文需要知道的事情
- 硬盘参数你都懂吗?(上)-从案例引发的讨论
- 学习:重写hashCode()方法的必要性
- java 1000以内的完数
- JAVA版本微信公众账号开源项目版本发布-jeewx1.0(捷微)
- java 轻量级同步volatile关键字简介与可见性有序性与synchronized区别 多线程中篇(十二)...
- 1075 - Incorrect table definition;there can be only one auto column and it must be defined as a key
- java的io流的file类_java IO流 (一) File类的使用
- fastreport masterdata每页都显示_ALIENTEK 阿波罗 STM32F767 开发板资料连载十六章 OLED 显示实验...
- 2020华为软挑总结
- html5 web报表工具,Web报表工具的填报功能
- 【老骥伏枥-狗年大礼包】嵌入式linux逆向工程,手把手教你作黑Q-第二讲
- 一篇文章带你彻底了解Kubernetes
- Cesium图形绘制
- java清空表格怎么实现_Java 创建、删除、操作PPT中的表格
- rq940服务器 经常自动重启,高端首选 联想ThinkServer RQ940服务器
- 关于计算机安全的英语文章,计算机专业英语期末论文
- loj 6184 无心行挽 虚树+DP+倍增
- 八年级英语下册计算机教学总结,初中信息技术教学工作总结
热门文章
- 前缀中缀后缀表达式的计算求值
- C语言中#define的用法(转)
- oracle放在内存里,oracle如中何把小表钉住在内存中
- ftp服务器上传文件权限设置,ftp服务器 上传文件权限设置
- 计算机科学与技术pdf,计算机科学与技术(.PDF
- LeetCode22——Generate Parentheses(给定n对括号,然后看有多少正确的括号组合)
- 添加WCF服务引用失败解决办法
- Python爬虫入门教程 22-100 CSDN学院课程数据抓取
- Apache 配置:是否显示文件列表
- 关于a标签不能调用js方法的小细节,你注意到了么?