算法-相似字符串组-并查集

Benchmark系列——基本概念和分类 本文主要介绍了Benchmark的基本概念和分类情况。 阅读详情

1、题目介绍

如果交换字符串 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

2、题目分析

  • 1)首先解决如何判断两个字符串是相似的,给定的字符串都是异位词,也就是任意两个字符串统计每个字符的个数都是一致的,那么通过遍历解决:两个字符串相等,或者有两个不一样的字符,则返回true。
  • 2)如何将相似的字符串相关联?通过并查集进行关联。
  • 3)如何检查所有的字符串,从第一个开始,往后比较所有,之后从第二个开始

3、代码实现

class Solution {
    public int numSimilarGroups(String[] strs) {
        Unionfind uf = new Unionfind(strs.length);
        for(int i = 0;i < strs.length - 1;i++){
            for(int j = i + 1;j < strs.length;j++){
                if(islike(strs[i],strs[j])){
                    uf.union(i,j);
                }
            }
        }
        return uf.getCount();
    }
    public boolean islike(String x,String y){
        int count = 0;
        for(int i = 0;i < x.length();i++){
            if(x.charAt(i) != y.charAt(i)){
                count++;
            }
        }
        return count == 2 || count == 0;
    }
}
class Unionfind{
    private int[] parent;
    private int size;
    private int count;

    public Unionfind(int n){
        this.size = n;
        this.count = n;
        parent = new int[size];
        for(int i = 0;i < size;i++){
            parent[i] = i;
        }
    }
    public int find(int x){
        if(parent[x] != x){
            parent[x] = find(parent[x]);
        }
        return parent[x];
    }

    public void union(int x,int y){
        int x_root = find(x);
        int y_root = find(y);
        if(x_root == y_root) return;
        parent[x_root] = y_root;
        count--;
    }
    public int getCount(){
        return count;
    }
}

4、复杂度分析

  • 时间复杂度:O(n * n * m)
  • 空间复杂度:O(n)
ONFI5.0命令字实战指南:从基础操作到高级应用 本文深入解析ONFI5.0协议的核心——命令字,提供从基础操作到高级应用的实战指南。详细拆解了NAND闪存的复位、读状态、数据读取(00-30)、页编程(80-10)和块擦除(60-D0)等关键命令周期,并探讨了多平面操作与缓存操作等高级性能优化技巧,帮助开发者高效、稳定地与NAND芯片进行底层交互。 阅读详情

相关推荐

Social-Auto-Upload实战:如何用Python+Playwright实现抖音/B站/小红书一键三连发?

本文详细介绍了如何使用Python和Playwright框架构建Social-Auto-Upload自动化上传工具,实现抖音、B站、小红书等平台的一键多发布。通过模拟真实用户操作和Cookie管理技术,该工具能有效解决内容创作者跨平台发布的重复劳动问题,提升工作效率。

day7的博客 1400

字符串归类 并查集

4304. 字符串归类 给定 n 个由小写字母构成的字符串。 现在,请你对它们进行归类。 对于两个字符串 a 和 b: 如果至少存在一个字母在 a 和 b 中同时出现,则 a 和 b 属于同一类字符串。 如果字符串 c 既与字符串 a 同类,又与字符串 b 同类,则 a 和 b 属于同一类字符串。 请问,最终所有字符串被划分为多少类。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一个仅由小写字母构成的字符串。 注意,输入字符串可能相同。 输出格式 一个整数,表示最终所有字符串被划分为的类的数

Gettler的博客 1718

深入剖析QWEN 2.5模型架构:从GQA到RoPE的技术实现

本文深入解析了QWEN 2.5模型架构,重点介绍了其创新的GQA(分组查询注意力)和RoPE(旋转位置编码)技术实现。通过详细代码解读,展示了这些技术如何提升模型的计算效率和长文本处理能力,适用于代码生成和数学推理等任务。文章还提供了实践部署建议和调优经验,帮助开发者更好地应用这一先进模型。

weixin_42548816的博客 389

Leetcode-并查集(字符串)-839. 相似字符串组

题目: 题解: 判断字符串是否相似:字符串本身一样,或, 只有两个位置的字符换了位置 由于给出的所有字符串长度都一样,且涉及到的字符都一样,所以要判断是否为相似字符串, 首先看他们是否equals,否则查看他们每个位置对应的字符是否一致,统计不一样的次数,如果超过2,则不相似,否则相似。 然后用并查集将相似的连通,最终统计连通块就行 代码: class Solution { public int numSimilarGroups(String[] strs) {

一只菜鸟夹 537

RK3588平台-ES8388音频驱动调试与设备树配置实战

本文详细解析了在RK3588平台上调试ES8388音频驱动的实战过程。内容涵盖Linux音频驱动的三层架构(Machine、Platform、Codec),并重点提供了设备树(DTS)的完整配置示例,包括I2C节点、声卡节点及音频路由设置。文章还分享了驱动加载验证、amixer调试命令以及常见问题(如无声、变调)的排查思路,旨在帮助开发者快速完成RK3588与ES8388的音频系统集成。

mango的博客 806

从拆箱到跑通:Intel RealSense D435i开箱实测+ROS驱动配置全流程

本文详细记录了Intel RealSense D435i深度相机的开箱体验,并提供了在Ubuntu 22.04与ROS2 Humble环境下,从安装librealsense2 SDK到配置ROS2驱动的完整流程。重点解决了驱动安装、数据流发布、点云对齐以及IMU数据融合等关键步骤,帮助研究者和开发者快速实现D435i与机器人系统的集成。

weixin_29168393的博客 304

交换字符串中的元素-并查集

题目:给你一个字符串 s,以及该字符串中的一些「索引对」数组 pairs,其中 pairs[i] = [a, b] 表示字符串中的两个索引(编号从 0 开始)。 你可以 任意多次交换 在 pairs 中任意一对索引处的字符。 返回在经过若干次交换后,s 可以变成的按字典序最小的字符串。 示例 1: 输入:s = "dcab", pairs = [[0,3],[1,2]] 输出:"ba...

weixin_39853412的博客 767

K8S部署Java项目 pod的logs报错为:Error: Unable to access jarfile app.jar

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 2600

字符串归类---并查集/图论+dfs

并查集写法 #include <iostream> #include <cstring> #include <algorithm> using namespace std; typedef pair<int, int> PII; const int N = 200010; int cnt[N],p[N]; int n; int find(int x) { if(p[x]!=x)p[x]=find(p[x]); return p[x]; } .

ZZU_LGY 207

基于 ESP32 的智能环境监测与远程报警系统

本系统基于 ESP32 实现了环境数据的采集、远程传输、报警通知功能,硬件成本低、接线简单、代码可直接运行。用户可根据实际需求调整传感器类型(如替换为 PM2.5 传感器、土壤湿度传感器)和功能扩展,适合嵌入式 IoT 入门学习和实际场景应用。通过多轮迭代(如优化低功耗、增加 APP 控制),可进一步提升系统的实用性和稳定性。

weixin_42300449的博客 1024

23、管状剪纸结构的研究与功能生成连杆机构的综合设计

本文研究了管状剪纸结构的压缩运动特性,通过剪纸技术将非刚性可折叠的Yoshimura和Kresling折纸结构转化为刚性可折叠结构,并提出径向可闭合剪纸(RC-kiri)构型。推导了位移与折叠角之间的数学关系,设计了带外部LET接头的RC-kiri模型,建立了力-位移理论模型并通过Abaqus进行有限元验证,制作了3D打印物理模型以测量直径变化。同时,研究了四杆和六杆功能生成连杆机构的综合设计方法,基于负闭合运动链和最小二乘法实现函数生成。结果表明理论、仿真与实验整体吻合良好,误差来源得到分析,为机器人、机

nokia的博客 167

1202. 交换字符串中的元素 ( 并查集 )

LeetCode: 1202. 交换字符串中的元素 并查集, 类似 leetcode 223 周赛第三题 将pair中关联的字符连通添加进优先队列中 ( 几个圈子各自排序,然后插入 思路: 几个下标的字母,如有交换关系,则可看作有传递关系,可归并成一个圈子, 然后每个圈圈里的字母按从小到大排序,这里用到hashmap,优先队列, 每个根节点作key,value为小堆,依次遍历s下标,查到对应的根节点,即可找到map中的优先队列,poll堆顶即可 AC Code class Solution {

lankerens 493

1篇1章4节:生成对抗网络GAN和图像生成领域的StyleGAN

AI图像生成技术的革命性突破:从GAN到StyleGAN 近年来,人工智能在图像生成领域取得显著进展,尤其是生成对抗网络(GAN)的发展推动了技术的飞跃。从早期的基础GAN到渐进式GAN(Progressive GAN),再到革命性的StyleGAN,AI生成图像的逼真度已接近人类创作水平。StyleGAN通过引入风格潜向量和自适应实例归一化,实现了对图像风格与内容的精细控制,广泛应用于人脸生成、艺术创作及影视行业。后续的StyleGAN2解决了“斑点”问题,StyleGAN3进一步优化纹理过渡,提升了图像

MD Code 214

【算法练习】leetcode每日一题 839. 相似字符串组

目录 839. 相似字符串组 算法 代码 839. 相似字符串组 难度困难 如果交换字符串X中的两个不同位置的字母,使得它和字符串Y相等,那么称X和Y两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。 例如,"tars"和"rats"是相似的 (交换0与2的位置);"rats"和"arts"也是相似的,但是"star"不与"tars","rats",或"arts"相似。 总之,它们通过相似性形成了两个关联组:{"tars", "r...

一蓑烟雨任平生 430

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

#打卡力扣 相似字符串组

打卡力扣专题第一天 今天做的题目是相似字符串组,难度为困难。运用的思想是并查集。 题目 如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。 例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,“rats”,或 “arts” 相似 总之,它们通过相似性形成了两个关联组:{“tars”, “ra

Formalinn的博客 262

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【并查集】A015_LC_相似字符串组(扩展网格 + 连通块数量)

一、Problem 如果我们交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。 例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,“rats”,或 “arts” 相似。 总之,它们通过相似性形成了两个关联组:{“tars”, “rats”, “arts”} 和 {“star”}。注意,“tars”

无敌兔0x01 362

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Leetcode 839. 相似字符串组 C++

Leetcode 839. 相似字符串组 题目 如果我们交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。 例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,“rats”,或 “arts” 相似。 总之,它们通过相似性形成了两个关联组:{“tars”, “rats”, “arts”} 和 {“st

weixin_43750513的博客 463

【LeetCode】839. 相似字符串组 Similar String Groups (Python)

作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录题目描述解题思路并查集代码刷题心得欢迎加入组织日期 题目地址:https://leetcode-cn.com/problems/similar-string-groups/ 题目描述 如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。 例如,对于 [“tars”, .

负雪明烛 1161

JAVA程序设计:相似字符串组(LeetCode:839)

如果我们交换字符串X 中的两个不同位置的字母,使得它和字符串Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。 例如,"tars" 和 "rats" 是相似的 (交换 0 与 2 的位置);"rats" 和 "arts" 也是相似的,但是 "star" 不与 "tars","rats",或 "arts" 相似。 总之,它们通过相似性形成了两个关...

信仰.的博客 634

55.【必备】并查集-上

本文的网课内容学习自B站左程云老师的算法详解课程,旨在对其中的知识进行整理和分享~

XY_StarField的博客 2047

(左程云)算法讲解056【必备】并查集-上

前置知识 : 无并查集的使用是如下的场景1)一开始每个元素都拥有自己的集合,在自己的集合里只有这个元素自己2)find(i):查找i所在集合的代表元素,代表元素来代表i所在的集合3)boolean isSameSet(a, b):判断a和b在不在一个集合里4)void union(a, b):a所在集合所有元素 与 b所在集合所有元素 合并成一个集合5)各种操作单次调用的均摊时间复杂度为O(1)并查集原理图解注意:带权并查集的内容是大厂笔试面试冷门内容,会在【挺难】课程里讲述。

哀莫大于心死 671

leetcode每日一题—839.相似字符串组

题目: 如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。 例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,“rats”,或 “arts” 相似。 总之,它们通过相似性形成了两个关联组:{“tars”, “rats”, “arts”} 和 {“star”}。注意,“tars” 和 “arts

jqq125的博客 199

LeetCode:839.相似字符串组——困难

题目: 839.相似字符串组 如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。 例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,“rats”,或 “arts” 相似。 总之,它们通过相似性形成了两个关联组:{“tars”, “rats”, “arts”} 和 {“star”}。注意,“ta

Vicky 269

LC839:相似字符串组

如果交换字符串X中的两个不同位置的字母,使得它和字符串Y相等,那么称X和Y两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。例如,"tars"和"rats"是相似的 (交换0与2的位置);"rats"和"arts"也是相似的,但是"star"不与"tars""rats",或"arts"相似。和{"star"}。注意,"tars"和"arts"是在同一组中,即使它们并不相似。形式上,对每个组而言,要确定一个单词在组中,只需要这个词和该组中至少一个单词相似。给你一个字符串列表strs。

m0_51547272的博客 455

【八十】【算法分析与设计】并查集应用!!!二维网格降低成一维,遍历判断每一个点不重不漏,765. 情侣牵手,839. 相似字符串组,200. 岛屿数量

1.首先给情侣分集合,例如01是一对情侣,对应0号情侣,23是一对情侣,对应1号情侣,45是一对情侣,对应2号情侣.情侣的对应关系是/2操作对应关系.2.01下标有两个人,将这两个人对应的情侣号集合合并,23下标有两个人,将这两个人的对应的情侣号集合合并,以此类推.3.对于所有的存在的集合,每一个集合需要交换的最小次数是个数-1.例如第一个集合元素有n个,那么就需要n-1次交换,第二个集合元素有m个,那么就需要m-1次交换.4.将所有交换次数相加,得到n/2-m.也就是总共的情侣个数减去集合个数.5.

m0_74163972的博客 1336

leetcode 困难题 839. Similar String Groups 相似字符串组

邹九的个人博客 286
上一篇: Netty-通过Maven构建Netty项目-IDEA依赖导入
下一篇: Netty-Bootstrap/ServerBootstrap-核心组件I
酱油瓶啤酒杯
博客等级 码龄8年 35粉丝 135原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值