leetcode 839. 相似字符串组(并查集)
如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。
例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,“rats”,或 “arts” 相似。
总之,它们通过相似性形成了两个关联组:{“tars”, “rats”, “arts”} 和 {“star”}。注意,“tars” 和 “arts” 是在同一组中,即使它们并不相似。形式上,对每个组而言,要确定一个单词在组中,只需要这个词和该组中至少一个单词相似。
给你一个字符串列表 strs。列表中的每个字符串都是 strs 中其它所有字符串的一个字母异位词。请问 strs 中有多少个相似字符串组?
示例 1:
输入:strs = [“tars”,“rats”,“arts”,“star”]
输出:2
代码
class Solution {int[] fa;public void init(){for(int i=0;i<fa.length;i++)fa[i]=i;}public int find(int x){if(x!=fa[x])fa[x]=find(fa[x]);return fa[x];}public void union(int x,int y){x=find(x);y=find(y);if(x==y) return;fa[x]=y;}public int numSimilarGroups(String[] strs) {int n=strs.length,c=n;fa=new int[n];init();for(int i=0;i<n;i++)//遍历所有字符串的两两组合for(int j=i+1;j<n;j++){if(find(i)==find(j)) continue;if(checkNumSimilarGroups(strs[i],strs[j])){union(i,j); c--;//统计连通分量}}return c;}public boolean checkNumSimilarGroups(String l,String r) {//判断是否相似int n=l.length(),cnt=0;for(int i=0;i<n;i++)if(l.charAt(i)!=r.charAt(i)) cnt++;return cnt==2||cnt==0;}
}
leetcode 839. 相似字符串组(并查集)相关推荐
- [leetcode] 839. 相似字符串组并查集
class USF { public:int *parent;int *rank;int groupCount; //组数USF(int n){parent = new int[n];rank = n ...
- 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈
题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...
- 839. 相似字符串组
链接:839. 相似字符串组 题解: class Solution {public:vector<int> _rank;vector<int> _id;int find(int ...
- LeetCode 1061. 按字典序排列最小的等效字符串(并查集)
文章目录 1. 题目 2. 解题 1. 题目 给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符. 举个例子,如果 A = "abc" 且 B = ...
- 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 721. 账户合并(并查集)
给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址 ...
最新文章
- 几个阿里, 美团,腾讯大佬的公众号!超级变态!
- jQuery选择器回顾,IE8还需要你发光发热
- 在某些输入上删除IE10的“清除字段”X按钮?
- R3Query 大数据分析系统2017将发布免费个人版
- 学python需要记笔记吗_自学python需要做什么笔记
- 如何下载 Intel Integrated Performance Primitives –intel IPP
- ubuntu 只有客人会话登录(第一次深刻感受文件权限的威力 )
- 单点登录 之 OAuth
- 【网络基础】路由表,分组转发算法
- 南京大学python_python split()函数
- 基于FPGA----VGA显示跳动的小白框设计
- sql 将8位字符串转换成日期型
- 学习python 3 入门知识
- 多人操作sqlite3数据库冲突问题解决方法
- 数学分析:函数序列及其一致收敛性
- 简述计算机软件与硬件,简述计算机硬件与软件的关系。 - 问答库
- Kaldi入门教程 aishell脚本
- 搭载鸿蒙系统的摄像头,搭载鸿蒙系统的华为P50发布日期曝光
- 送给程序员的话 - 大牛们的经典语录
- 解决Windows剪切、删除、移动海量文件时,速度慢和卡死的问题