当前位置: 首页 > article >正文

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

题目:1061. 按字典序排列最小的等效字符串

在这里插入图片描述
在这里插入图片描述

思路:使用并查集,来将等价的字符连起来,形成一棵树。这棵树最小的字母,就代表整颗树,时间复杂度0(n),细节看注释。
C++版本:

class Solution {
public:// 并查集int findd(int u,vector<int> &p){if(p[u]!=u) p[u]=findd(p[u],p);return p[u];}string smallestEquivalentString(string s1, string s2, string baseStr) {// 构建并查集的函数vector<int> p(26);for(int i=0;i<26;i++){p[i]=i;}// 合并等价字母for(int i=0;i<s1.size();i++){int a=findd(s1[i]-'a',p);int b=findd(s2[i]-'a',p);//选最小的字母作为根节点if(a>b) swap(a,b);p[b]=a; }// 答案string tmp="";for(int i=0;i<baseStr.size();i++){// 找到最小的字母下标int a=findd(baseStr[i]-'a',p);tmp.push_back(a+'a');}return tmp;}
};

JAVA版本:

class Solution {int findd(int u,int[] p){if(p[u]!=u) p[u]=findd(p[u],p);return p[u];}public String smallestEquivalentString(String s1, String s2, String baseStr) {int[] p=new int[26];for(int i=0;i<26;i++){p[i]=i;}for(int i=0;i<s1.length();i++){int a=findd(s1.charAt(i)-'a',p);int b=findd(s2.charAt(i)-'a',p);if(a>b){int t=b;b=a;a=t;}p[b]=a;}char[] s=baseStr.toCharArray();for(int i=0;i<s.length;i++){s[i]=(char)(findd(s[i]-'a',p)+'a');}return new String(s);}
}

Go版本:

func smallestEquivalentString(s1 string, s2 string, baseStr string) string {p:=make([]int,26)for i:=0;i<26;i++ {p[i]=i}for i:=0;i<len(s1);i++ {a:=findd(int(s1[i]-'a'),p)b:=findd(int(s2[i]-'a'),p)if a>b {t:=bb=aa=t}p[b]=a}s:=make([]byte,len(baseStr))for i:=0;i<len(baseStr);i++ {s[i]=byte(findd(int(baseStr[i]-'a'),p)+'a')}return string(s)
}
func findd(u int, p []int) int {if p[u]!=u {p[u]=findd(p[u],p)}return p[u]
}
http://www.lryc.cn/news/2401327.html

相关文章:

  • linux 安装mysql8.0;支持国产麒麟,统信uos系统
  • C#实现远程锁屏
  • 历史记录隐藏的安全风险
  • SpringBoot3整合MySQL8的注意事项
  • 网络安全大模型理解
  • 智语心桥:当AI遇上“星星的孩子”,科技如何点亮沟通之路?
  • itop-3568开发板机器视觉opencv开发手册-图像绘制-画线
  • 【高频面试题】快慢指针及相关应用
  • sudo docker exec -it backend bash 以交互方式(interactive)进入正在运行的 Docker 容器的命令行环境
  • [论文阅读] 人工智能 | 当AI遇见绿色软件工程:可持续AI实践的研究新方向
  • [论文阅读] 人工智能 | 用大语言模型抓虫:如何让网络协议实现与RFC规范对齐
  • 浅析EXCEL自动连接PowerBI的模板
  • DeepSeek 赋能金融反洗钱:AI 驱动的风险监测革新之路
  • java32
  • 【Redis】zset 类型
  • 从Gartner报告看Atlassian在生成式AI领域的创新路径与实践价值
  • Kafka 安装教程(支持 Windows / Linux / macOS)
  • OpenCV种的cv::Mat与Qt种的QImage类型相互转换
  • 机器学习——什么时候使用决策树
  • llm-d:面向Kubernetes的高性能分布式LLM推理框架
  • 前端没有“秦始皇“,但可以做跨端的王[特殊字符]
  • Flutter如何支持原生View
  • mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
  • 【数据分析】什么是鲁棒性?
  • 适老化场景重构:现代家政老年照护虚拟仿真实训室建设方案​
  • Qt/C++学习系列之QGroupBox控件的简单使用
  • Ubuntu设置之初始化
  • 如何轻松地将数据从 iPhone传输到iPhone 16
  • 开源供应链攻击持续发酵,多个软件包仓库惊现恶意组件
  • Docker Compose 备忘