如果交换字符串 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. 相似字符串组(并查集)相关推荐

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

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

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

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

  3. 839. 相似字符串组

    链接:839. 相似字符串组 题解: class Solution {public:vector<int> _rank;vector<int> _id;int find(int ...

  4. LeetCode 1061. 按字典序排列最小的等效字符串(并查集)

    文章目录 1. 题目 2. 解题 1. 题目 给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符. 举个例子,如果 A = "abc" 且 B = ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 几个阿里, 美团,腾讯大佬的公众号!超级变态!
  2. jQuery选择器回顾,IE8还需要你发光发热
  3. 在某些输入上删除IE10的“清除字段”X按钮?
  4. R3Query 大数据分析系统2017将发布免费个人版
  5. 学python需要记笔记吗_自学python需要做什么笔记
  6. 如何下载 Intel Integrated Performance Primitives –intel IPP
  7. ubuntu 只有客人会话登录(第一次深刻感受文件权限的威力 )
  8. 单点登录 之 OAuth
  9. 【网络基础】路由表,分组转发算法
  10. 南京大学python_python split()函数
  11. 基于FPGA----VGA显示跳动的小白框设计
  12. sql 将8位字符串转换成日期型
  13. 学习python 3 入门知识
  14. 多人操作sqlite3数据库冲突问题解决方法
  15. 数学分析:函数序列及其一致收敛性
  16. 简述计算机软件与硬件,简述计算机硬件与软件的关系。 - 问答库
  17. Kaldi入门教程 aishell脚本
  18. 搭载鸿蒙系统的摄像头,搭载鸿蒙系统的华为P50发布日期曝光
  19. 送给程序员的话 - 大牛们的经典语录
  20. 解决Windows剪切、删除、移动海量文件时,速度慢和卡死的问题

热门文章

  1. C++实现 简单 单链表
  2. .net core 杂记:用Autofac替换内置容器
  3. 服务器与客户端连接 聊天机器人
  4. bzoj2938: [Poi2000]病毒
  5. 【codevs2497】 Acting Cute
  6. Android商城开发系列(二)——App启动欢迎页面制作
  7. NGUI之输入文本框的使用
  8. JavaScript的DOM编程总结
  9. spring集合的注入
  10. 学习使用资源文件[2] - Ico