每日一练 2024.9.29(2)

目录

解题思路与代码实现

题目分析

一、解题策略

关键步骤:

二、代码实现

三、代码解析

四、复杂度分析

五、运行示例

示例1:

示例2:

六、总结


解题思路与代码实现

题目分析

这道题目要求我们找到字符串列表 strs 中的相似字符组。两字符串相似是指,它们通过交换某些字符可以互相转化。在问题中,如果两个字符串相互相似,那么它们可以归为同一组。我们需要找出字符串列表中有多少个相似字符组。

  • 字符组的定义:通过交换某些位置的字符来形成的字符串。
  • 相似性判断:如果字符串通过交换最多两个字符的位置,可以互相转换,则它们属于同一组。

这是一个图论中的联通分量问题,可以通过并查集(Union-Find)或者深度优先搜索(DFS)来求解。


一、解题策略

本题可以通过并查集来解决。并查集是一种适合解决连通性问题的数据结构,特别适合用于合并集合和查询集合是否连通的操作。对于每个字符串,我们都需要遍历并检查它是否和列表中其他字符串相似,如果相似,就将它们合并到一个组。

  1. 初始化并查集:对于每一个字符串,将其看作是一个节点,初始化并查集。
  2. 相似性判断:对于任意两个字符串,如果它们相似,则将它们合并到同一集合。
  3. 计数连通分量:最后统计并查集中有多少个连通分量,即有多少个相似字符组。
关键步骤:
  1. 相似判断函数:用来判断两个字符串是否相似(最多两个字符不同)。
  2. 并查集的合并与查找操作

二、代码实现

 
class Solution {// 并查集数组int[] parent;// 查找操作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 rootX = find(x);int rootY = find(y);if (rootX != rootY) {parent[rootX] = rootY; // 合并两个集合}}// 判断两个字符串是否相似public boolean isSimilar(String a, String b) {int diff = 0;for (int i = 0; i < a.length(); i++) {if (a.charAt(i) != b.charAt(i)) {diff++;if (diff > 2) {  // 如果超过2个位置不同,则不相似return false;}}}return true;}public int numSimilarGroups(String[] strs) {int n = strs.length;parent = new int[n];// 初始化并查集,每个节点是自己的父节点for (int i = 0; i < n; i++) {parent[i] = i;}// 进行合并操作for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {if (isSimilar(strs[i], strs[j])) {union(i, j);}}}// 统计连通分量的数量int count = 0;for (int i = 0; i < n; i++) {if (find(i) == i) {  // 如果是根节点,则表示是一个新的字符组count++;}}return count;}
}

三、代码解析

  1. 并查集初始化parent[i] = i,表示每个节点一开始都是独立的组,自己是自己的父节点。
  2. 相似性判断:通过遍历字符串的每个字符,统计不同字符的个数,如果超过2个字符不相同,则它们不相似。
  3. 合并集合:通过 union(i, j) 来合并两个相似的字符串。
  4. 查找连通分量:最终通过查找根节点,统计有多少个独立的组(即多少个相似字符组)。

四、复杂度分析

  • 时间复杂度

    • 并查集的初始化为 O(n),其中 n 是字符串的数量。
    • 双重循环判断字符串的相似性,复杂度为 O(n^2 * m),其中 m 是字符串的长度,因为每次比较字符串相似性需要 O(m) 的时间。
    • 合并和查找的操作接近常数时间,路径压缩可以使得查找的时间复杂度接近于 O(1)
    • 总的时间复杂度为 O(n^2 * m)
  • 空间复杂度

    • 主要空间开销是并查集的数组 parent,占用 O(n) 的空间。
    • 额外的空间开销较少,因此总的空间复杂度为 O(n)

五、运行示例

示例1:
 
输入:strs = ["tars","rats","arts","star"]
输出:2

解释

  • "tars" 和 "rats" 相似(交换1次)。
  • "rats" 和 "arts" 相似(交换1次)。
  • "arts" 和 "star" 相似(交换1次)。 所以这四个字符串形成一个相似字符组,答案是 1
示例2:
 
输入:strs = ["omv","ovm"]
输出:1

解释

  • "omv" 和 "ovm" 相似(交换1次)。 所以它们属于同一组,答案是 1

六、总结

在这道题中,我们通过并查集结构实现了对相似字符组的判断和合并操作。通过设计相似性判断函数,我们能够准确地将相似的字符串分为一组。最终,通过并查集的查找操作,统计出有多少个相似字符组。通过这种方法,我们解决了字符串相似性分组的问题,并且该算法具有较好的时间和空间效率。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/54951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++——vector

1.简介 2.成员函数 2.1构造函数 void test_vector1() {//1.无参构造vector<int> v1;cout << v1.capacity() << endl;//2.传参构造vector<int> v2(10,1);//3.迭代器构造vector<int> v3(v2.begin(), v2.end());//也可以使用其它容器的迭代器区间来…

scrapy快速上手

安装 除了scrapy本身还要安装两个库 pip install scrapy pip install pywin32 pip install wheel 创建项目 在要创建项目的地方打开powershell scrapy startproject 项目名 我们得到这样的项目结构&#xff0c;功能如下 scrapy.cfg 项目的主配置信息 …

DMA传输原理详解

DMA-(Data Memory Access) 作用 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传 输。无须CPU干预&#xff0c;数据可以通过DMA快速地移动&#xff0c;这就节省了CPU的资源来做其他操作。两个DMA控制器有12个通道(DMA1有7个通道&#xff0c;…

LeetCode[中等] 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 思路 回溯法 log&#xff1a;当前结果数组&#xff1b;level&#xff1a…

第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)

梁哲&#xff0c;同济大学长聘特聘教授&#xff0c;国家杰青、首届国家杰青延续项目获得者、上海市曙光学者、上海市优秀学术带头人。本科毕业于新加坡国立大计算机工程系、硕士毕业于新加坡国立大学工业与系统工程系、博士毕业于美国新泽西州立大学工业工程系。理论研究主要集…

修改Opcenter EXFN 页面超时时间(Adjust UI Session Extend Token)

如果你想修改Opcenter EXFN中页面Session的超时时间&#xff0c;你可以按照如下步骤修改SessionAge 这个参数&#xff1a; 管理员运行CMD执行以下命令 umconf -getconfig -file C:\temp\config.json如果第2步有报错&#xff0c;则执行步骤4;如果没有报错则执行第5步如果第2步…

探索光耦:光耦在电脑电源中的应用及其重要性

随着计算机技术的飞速发展&#xff0c;电脑已成为现代生活和工作中不可或缺的工具。无论是日常办公、游戏娱乐还是复杂的图像处理&#xff0c;电脑电源的稳定性和安全性都至关重要。作为电脑电源的核心部件之一&#xff0c;光耦&#xff08;光电耦合器&#xff09;在提升电源性…

JavaScript网页设计案例:互动式简历网站

JavaScript网页设计案例&#xff1a;互动式简历网站 在现代网页设计中&#xff0c;JavaScript 是实现交互和动态效果的关键技术。本文将通过一个完整的案例&#xff0c;展示如何使用 JavaScript 构建一个交互式的个人简历网页。本文不仅会涵盖 HTML 和 CSS 的使用&#xff0c;…

android和ios双端应用性能的测试工具

1.工具介绍 基于日常工作的需要&#xff0c;开发了一款新的android和ios端应用性能测试工具&#xff0c;本工具在数据测试方面与所流行的工具没有区别。欢迎下载使用体验。 本工具为筋斗云&#xff0c;工具说明 本工具无侵入&#xff0c;不需要root&#xff0c;低延迟…

(十七)、Mac 安装k8s

文章目录 1、Enable Kubernetes2、查看k8s运行状态3、启用 kubernetes-dashboard3.1、如果启动成功&#xff0c;可以在浏览器访问3.2、如果没有跳转&#xff0c;需要单独安装 kubernetes-dashboard3.2.1、方式一&#xff1a;一步到位3.2.2、方式二&#xff1a;逐步进行 1、Enab…

如何恢复被删除的 GitLab 项目?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

发明专利实用新型专利外观设计专利

发明专利是对一种新产品、新方法或其改进所提出的技术方案进行保护的一种知识产权形式。发明专利对于技术创新有着较高的要求&#xff0c;通常涉及到较复杂的技术内容和较长期的研发工作。以下是有关发明专利的基本信息&#xff1a; 1. 保护对象 发明专利可以保护产品、方法或…

time命令:轻松测量Linux命令执行时间!

一、命令简介 用途&#xff1a; 用于测量 Linux 命令执行的时间&#xff0c;包括实际时间、用户 CPU 时间和系统 CPU 时间。刚开始以为是用来“看现在几点钟”的 &#x1f972;。标签&#xff1a; 实用工具&#xff0c;性能分析。 ‍ 二、命令参数 2.1 命令格式 time [选项…

进程的那些事--实现shell

目录 前言 一、预备知识 二、实现步骤 1.思路 2.实现 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 学习的本质就是变现 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、预备知识 char * fgets ( char * str, i…

【C语言】__attribute__((packed))与#pragma pack

1、简介 在 C 语言中&#xff0c;自动对齐是指编译器会根据不同的数据类型自动调整它们在内存中的位置&#xff0c;确保它们按照特定的字节边界存储。这种做法可以让处理器更高效地读取和存储数据。 举个例子&#xff0c;像 int 这样的 4 字节数据通常会被对齐到 4 字节的边界上…

计算一个矩阵的逆矩阵的方法

计算一个矩阵的逆矩阵&#xff0c;主要适用于方阵&#xff08;行数与列数相同的矩阵&#xff09;&#xff0c;且只有非奇异矩阵&#xff08;行列式不为零的矩阵&#xff09;才有逆矩阵。逆矩阵 A − 1 A^{-1} A−1 满足以下条件&#xff1a; A A − 1 A − 1 A I A \time…

极狐GitLab 17.4 重点功能解读【一】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

js中正则表达式中【exec】用法深度解读

exec() 是 JavaScript 正则表达式对象&#xff08;RegExp&#xff09;中的一个方法&#xff0c;用于匹配字符串中的特定模式&#xff0c;并返回匹配结果。它比 test() 和 match() 更强大&#xff0c;因为它不仅仅返回匹配成功与否&#xff0c;还返回匹配的具体内容及其相关信息…

讯飞星火编排创建智能体学习(二)决策节点

目录 概述 决策节点 文生图节点 连接节点 测试结果 概述 在上一篇博文讯飞星火编排创建智能体学习&#xff08;一&#xff09;最简单的智能体构建-CSDN博客&#xff0c;我介绍了编排创作智能体&#xff0c;这篇来介绍一下“决策节点”。 决策节点 在编排创作智能体中&…

MQTT.fx 1.7.1使用说明篇(OneNET-MQTT-API调试)

&#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程) &#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程)https://blog.csdn.net/Wang2869902214/article/details/142501323 MQTT.fx 1.7.1使用教程 下载地址 MQ…