【LeetCode】839、相似字符串组

news/2024/12/29 7:34:32 标签: leetcode, 算法, 职场和发展

【LeetCode】839、相似字符串组

文章目录

  • 一、并查集
    • 1.1 并查集
  • 二、多语言解法

一、并查集

1.1 并查集

求共有几组, 联想到并查集, 即并查集有几个集合

字符串相似: 相差0个字符, 或2个字符

其中所有字符串长度都相同, 是比较方便处理的

// go
var sets int
var father [301]int

func numSimilarGroups(strs []string) int {
    n := len(strs)
    m := len(strs[0])
    build(n)
    for i := range n {
        for j := i+1; j < n; j++ {
            if find(i) == find(j) {continue} // 若已在一个集合中了, 而无需union
            diff := 0 // str[i] 和 str[j] 不同的字符数量
            for k := 0; k < m && diff < 3; k++ {
                if strs[i][k] != strs[j][k] {diff++}
            }
            if diff == 0 || diff == 2 {
                union(i, j)
            }
        }
    }
    return sets
}

func build(n int) {
    for i := range n {
        father[i] = i
    }
    sets = n
}

func find(i int) int {
    if father[i] != i {
        father[i] = find(father[i])
    }
    return father[i]
}

func union(a, b int) {
    fa, fb := find(a), find(b)
    if fa != fb {
        father[fa] = fb
        sets--
    }
}

参考左神 并查集

二、多语言解法

C p p / G o / P y t h o n / R u s t / J s / T s Cpp/Go/Python/Rust/Js/Ts Cpp/Go/Python/Rust/Js/Ts

// cpp
// go 同上
# python
// rust
// js
// ts

http://www.niftyadmin.cn/n/5803690.html

相关文章

基于MATLAB的冰箱水果保鲜识别系统

摘要&#xff1a;本作品旨在研究和实现基于MATLAB软件的冰箱水果保鲜识别系统&#xff0c;针对多种常见水果混合的图像进行处理和识别。首先&#xff0c;根据水果与背景的差异选择合适的阈值&#xff0c;对图像进行去噪和对比度增强&#xff0c;然后进行二值化处理。接下来&…

Linux系统 —— 进程控制系列 - 进程的等待:wait 与 waitpid

目录 1. 进程的等待 1.1 为什么需要等待 2. 进程等待的方法 1. wait 2. waitpid 3. 获取子进程status 4. 阻塞与非阻塞等待 续接前文&#xff1a; Linux系统 —— 进程控制系列 - 进程的创建与终止 &#xff1a;fork与exit-CSDN博客https://blog.csdn.net/hedhjd/artic…

python常用基础语法

Python是一种动态类型的编程语言&#xff0c;它允许在必要时为变量赋值&#xff0c;并提供了丰富的基础语法结构。以下是一些Python常用的基础语法&#xff1a; 一、基本语法元素 Hello, World! 这是编程旅程的传统起点。print("Hello, World!")这行代码告诉Python显…

三只脚的电感是什么东西?

最近在做加湿器&#xff0c;把水雾化的陶瓷片需要有专门的驱动电路。 我参考了某宝卖家的驱动板以及网上的开源项目&#xff0c;发现了驱动电路的核心就是一个三脚电感。 在此之前我都没注意过这玩意&#xff0c;三脚电感不也还是电感嘛&#xff1f; 今天我们就来看看三脚电…

自定义拦截器+自定义限流注解实现接口限流+自定义树工具

文章目录 1.目录2.具体实现1.AccessLimit.java 自定义限流注解2.AccessLimitInterceptor.java 限流拦截器3.WebConfig.java 注册拦截器4.RespBeanEnum.java 响应枚举5.LoginUserController.java6.测试1.正常请求2.被限流情况 自定义树工具v3.01.功能调整2.代码1.TreeBuilderCon…

VSCode 插件开发实战(十六):详解插件生命周期

前言 VSCode 它不仅功能强大&#xff0c;而且可以通过插件进行扩展&#xff0c;以满足不同开发者的需求。那么&#xff0c;VSCode 自定义插件的生命周期是如何运行的呢&#xff1f;今天我们就用通俗易懂的方式来讲解一下。 什么是 VSCode 插件&#xff1f; VSCode 插件是用来…

Kafka高性能设计

高性能设计概述 Kafka高性能是多方面协同的结果&#xff0c;包括集群架构、分布式存储、ISR数据同步及高效利用磁盘和操作系统特性等。主要体现在消息分区、顺序读写、页缓存、零拷贝、消息压缩和分批发送六个方面。 消息分区 存储不受单台服务器限制&#xff0c;能处理更多数据…

ESP32_H2(IDF)学习系列-ADC模数转换(单次转换)

一、简介 资料参考&#xff1a;https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32h2/api-reference/peripherals/adc_calibration.html 二、例程解析&#xff08;ONESHOT_Read&#xff09; 主函数&#xff1a; 单一转换初始化&#xff1a;