链接:839. 相似字符串组

题解:

class Solution {public:vector<int> _rank;vector<int> _id;int find(int p) {while(_id[p] != p) {_id[p] = _id[_id[p]];p = _id[p];}return p;}void union_find(int p, int q) {int root_p = find(p);int root_q = find(q);if(root_p == root_q) {return;}if(_rank[root_p] < _rank[root_q]) {_id[root_p] = root_q;} else if(_rank[root_q] < _rank[root_p]) {_id[root_q] = root_p;} else {_id[root_p] = root_q;_rank[root_q] += 1;}}bool is_connected(int p, int q) {return find(p) == find(q);}int get_size() {int cnt = 0;for(int i = 0; i < _id.size(); ++i) {if(_id[i] == i) {++cnt; }}return cnt;}bool check(const std::string& s1, const std::string& s2) {int cnt = 0;for(int i = 0; i < s1.size(); ++i) {if(s1[i] != s2[i]) {++cnt;}if(cnt > 2) {return false;}}return true;}int numSimilarGroups(vector<string>& strs) {if(strs.size() <= 0) {return 0;}_rank.resize(strs.size(), 1);_id.resize(strs.size());// 每个字符串自己为一个节点for(int i = 0; i < strs.size(); ++i) {_id[i] = i;}//判断一个字符串是否与其他的字符串,满足一个组的条件for(int i = 0; i < strs.size(); ++i) {for(int j = i+1; j < strs.size(); ++j) {// 如果已经在一个组了if(is_connected(i, j)) {continue;}// 检测是否满足规则if(check(strs[i], strs[j])) {union_find(i, j);}}}return get_size();}
};

839. 相似字符串组相关推荐

  1. leetcode 839. 相似字符串组(并查集)

    如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似.如果这两个字符串本身是相等的,那它们也是相似的. 例如,"tars" 和 ...

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

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

  3. leetcode839相似字符串组

    839.相似字符串组 每个字符串看作一个点,两个字符串之间是否相似看作边,则本题转化为图中有多少连通分量 //并查集模板 class UnionFind{vector<int>parent ...

  4. LeetCode中等题之特殊等价字符串组

    题目 给你一个字符串数组 words. 一步操作中,你可以交换字符串 words[i] 的任意两个偶数下标对应的字符或任意两个奇数下标对应的字符. 对两个字符串 words[i] 和 words[j] ...

  5. LeetCode 893. 特殊等价字符串组

    1. 题目 你将得到一个字符串数组 A. 如果经过任意次数的移动,S == T,那么两个字符串 S 和 T 是特殊等价的. 一次移动包括选择两个索引 i 和 j,且 i % 2 == j % 2,交换 ...

  6. C#LeetCode刷题之#893-特殊等价字符串组​​​​​​​​​​​​​​(Groups of Special-Equivalent Strings)

    问题 你将得到一个字符串数组 A. 如果经过任意次数的移动,S == T,那么两个字符串 S 和 T 是特殊等价的. 一次移动包括选择两个索引 i 和 j,且 i%2 == j%2,并且交换 S[j] ...

  7. LeetCode(893)——特殊等价字符串组(JavaScript)

    你将得到一个字符串数组 A. 如果经过任意次数的移动,S == T,那么两个字符串 S 和 T 是特殊等价的. 一次移动包括选择两个索引i和j,且i % 2 == j % 2,交换 S[j] 和 S ...

  8. 893. 特殊等价字符串组

    特殊等价字符串组 转载于:https://www.cnblogs.com/hglibin/p/11000851.html

  9. C++用字符串组成心形图案的尝试

    在网上看到好多有奇特图案的函数,比如这个公式,能绘出这样的心形图案. 为了用字符把心形区域填满,只需要设置for循环用x和y表示出一个方形画布区域,如果左边表达式的值不大于右边表达式1,则说明坐标位于 ...

最新文章

  1. 机器学习知识点(三十四)机器学习类学习资源
  2. leetcode62 不同路径
  3. 计算机桌面组成部分教案,计算机基础 教案设计(完整版).doc
  4. 华为路由器上有没有mac表_MAC地址表、ARP缓存表、路由表及交换机、路由器基本原理...
  5. python--列表,元组,字符串互相转换
  6. 解决!Gallery中嵌套ListView,Gallery不能滑动的问题
  7. tomcat java.ext.dirs_tomcat classloader 加载class顺序
  8. 瑞星杀毒软件linux序列号,瑞星杀毒软件2007光盘零售版是面向 Linux的?
  9. 车载双目摄像头,为什么特斯拉还在迟疑?
  10. 双三次插值算法的C++实现与SSE指令优化
  11. 朗强科技:什么是HDMI分配器,以及原理与安装
  12. 叶史瓦大学计算机科学,本地知名新西兰留学咨询平台排名
  13. DDR5 trainning
  14. android游戏开发教程之基本概念
  15. MySQL存储过程从入门到精通
  16. iOS图标启动图生成器(一)
  17. matlab神经网络应用设计 源代码,MATLAB神经网络应用设计
  18. 一文了解国内边缘计算玩家动态
  19. 8-5 以下四个在读写器作用范围内的电子标签为例说明二进制树形搜索算法选择电子标签的迭代过程
  20. php微信退款流程总结

热门文章

  1. 参加Windows 8 训练营上海站札记
  2. ftp的端口号20、21有何区别
  3. MySQL高性能及性能优化技巧---更适合开发人员
  4. 嵌入式领域相关期刊和会议
  5. Spark与hdfs delegation token过期的排查思路总结
  6. JavaScript => 解决 Unexpected lexical declaration in case block 的问题
  7. 重启后网卡失效 需要禁用再起来_win2008网卡禁用后如何启动 - 卡饭网
  8. [docker] docker-compose安装zookeeper集群
  9. 会议投稿视频制作流程
  10. 火狐浏览器-webkit-line-clamp兼容问题