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

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符。
举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' == 'c', 'b' == 'd', 'c' == 'e'

等价字符遵循任何等价关系的一般规则:

自反性:'a' == 'a'
对称性:'a' == 'b' 则必定有 'b' == 'a'
传递性:'a' == 'b''b' == 'c' 就表明 'a' == 'c'
例如,A 和 B 的等价信息和之前的例子一样,那么 S = "eed", "acd""aab",这三个字符串都是等价的,而 "aab" 是 S 的按字典序最小的等价字符串

利用 A 和 B 的等价信息,找出并返回 S 的按字典序排列最小的等价字符串。

示例 1:
输入:A = "parker", B = "morris", S = "parser"
输出:"makkek"
解释:根据 A 和 B 中的等价信息,
我们可以将这些字符分为 [m,p], [a,o], [k,r,s], [e,i]4 组。
每组中的字符都是等价的,并按字典序排列。所以答案是 "makkek"。示例 2:
输入:A = "hello", B = "world", S = "hold"
输出:"hdld"
解释:根据 A 和 B 中的等价信息,
我们可以将这些字符分为 [h,w], [d,e,o], [l,r]3 组。
所以只有 S 中的第二个字符 'o' 变成 'd',最后答案为 "hdld"。示例 3:
输入:A = "leetcode", B = "programs", S = "sourcecode"
输出:"aauaaaaada"
解释:我们可以把 A 和 B 中的等价字符分为 
[a,o,e,r,s,c], [l,p], [g,t][d,m]4 组,
因此 S 中除了 'u''d' 之外的所有字母都转化成了 'a',最后答案为 "aauaaaaada"。提示:
字符串 A,B 和 S 仅有从 'a''z' 的小写英文字母组成。
字符串 A,B 和 S 的长度在 11000 之间。
字符串 A 和 B 长度相同。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lexicographically-smallest-equivalent-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

请参考:数据结构–并查集(Disjoint-Set)

  • 并查集merge的时候,让祖先字符更小的作为代表
class dsu
{vector<int> f;
public:dsu(int n){f.resize(n);for(int i = 0; i < n; ++i)f[i] = i;}void merge(int a, int b){int fa = find(a), fb = find(b);if(fa > fb)//字母小的当代表,关键点f[fa] = fb;elsef[fb] = fa;}int find(int a){int origin = a;while(a != f[a])a = f[a];return f[origin] = a;}
};
class Solution {
public:string smallestEquivalentString(string A, string B, string S) {dsu u(26);for(int i = 0; i < A.size(); ++i)u.merge(A[i]-'a', B[i]-'a');for(int i = 0; i < S.size(); ++i)S[i] = u.find(S[i]-'a')+'a';return S;}
};

0 ms 6.7 MB

  • 一开始没想到字符小的作为代表,是用set做了下处理,代码如下
class dsu
{
public:vector<int> f;dsu(int n){f.resize(n);for(int i = 0; i < n; ++i)f[i] = i;}void merge(int a, int b){int fa = find(a), fb = find(b);f[fa] = fb;}int find(int a){int origin = a;while(a != f[a])a = f[a];return f[origin] = a;}
};
class Solution {
public:string smallestEquivalentString(string A, string B, string S) {dsu u(26);for(int i = 0; i < A.size(); ++i)u.merge(A[i]-'a', B[i]-'a');unordered_map<int, set<int>> m;for(int i = 0; i < 26; ++i)m[u.find(i)].insert(i);//分组,set内 begin最小,作为代表for(int i = 0; i < 26; ++i)u.f[i] = *m[u.f[i]].begin();//更新祖先为集团内最小的字符for(int i = 0; i < S.size(); ++i)S[i] = u.find(S[i]-'a')+'a';return S;}
};

8 ms 7.4 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

LeetCode 366. 寻找二叉树的叶子节点(上下翻转二叉树+BFS)

文章目录1. 题目2. 解题1. 题目 给你一棵二叉树&#xff0c;请按以下要求的顺序收集它的全部节点&#xff1a; 依次从左到右&#xff0c;每次收集并删除所有的叶子节点重复如上过程直到整棵树为空 示例: 输入: [1,2,3,4,5]1/ \2 3/ \ 4 5 输出: [[4,5,3],[2],[1]…

白话地图投影之初识地球

本文是Koala带你进入GIS世界的开篇&#xff0c;Koala打算用简单通俗的语言为大家介绍地图投影&#xff0c;帮助GISer理解地图投影的概念。作为进入GIS世界多年的老鸟&#xff0c;Koala也是在不断的实战中才真正理解和掌握地图投影的奥秘。 我们生活的地球长啥模样&#xff1f; …

欧洲杯2012

----------------------------------------------------------------------------- 欧洲杯2012 ----------------------------------------------------------------------------- 下载地址&#xff1a;http://itunes.apple.com/cn/app/ou-zhou-bei2012/id531622806?mt8 系统要…

LeetCode 245. 最短单词距离 III

文章目录1. 题目2. 解题1. 题目 给定一个单词列表和两个单词 word1 和 word2&#xff0c;返回列表中这两个单词之间的最短距离。 word1 和 word2 是有可能相同的&#xff0c;并且它们将分别表示为列表中两个独立的单词。 示例: 假设 words ["practice", "ma…

LeetCode 484. 寻找排列(找规律+贪心)

文章目录1. 题目2. 解题1. 题目 现在给定一个只由字符 ‘D’ 和 ‘I’ 组成的 秘密签名。 ‘D’ 表示两个数字间的递减关系&#xff0c;‘I’ 表示两个数字间的递增关系。 并且 秘密签名 是由一个特定的整数数组生成的&#xff0c;该数组唯一地包含 1 到 n 中所有不同的数字&a…

LeetCode 651. 4键键盘(DP,Ctrl+CV)

文章目录1. 题目2. 解题1. 题目 假设你有一个特殊的键盘包含下面的按键&#xff1a; Key 1: (A)&#xff1a;在屏幕上打印一个 A。Key 2: (Ctrl-A)&#xff1a;选中整个屏幕。Key 3: (Ctrl-C)&#xff1a;复制选中区域到缓冲区。Key 4: (Ctrl-V)&#xff1a;将缓冲区内容输出…

oracle scn隐藏参数,Oracle隐含参数scn不一致启动

Oracle隐含参数&#xff1a;allow_resetlogs_corruption的使用提示&#xff1a;Oracle的隐含参数只应该在测试环境或者在Oracle Support的支持下使用orOracle隐含参数&#xff1a;allow_resetlogs_corruption的使用提示&#xff1a;Oracle的隐含参数只应该在测试环境或者在Orac…

LeetCode 298. 二叉树最长连续序列(自顶向下)

文章目录1. 题目2. 解题1. 题目 给你一棵指定的二叉树&#xff0c;请你计算它最长连续序列路径的长度。 该路径&#xff0c;可以是从某个初始结点到树中任意结点&#xff0c;通过「父 - 子」关系连接而产生的任意路径。 这个最长连续的路径&#xff0c;必须从父结点到子结点…

LeetCode 159. 至多包含两个不同字符的最长子串(滑动窗口)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 s &#xff0c;找出 至多 包含两个不同字符的最长子串 t &#xff0c;并返回该子串的长度。 示例 1: 输入: "eceba" 输出: 3 解释: t 是 "ece"&#xff0c;长度为3。示例 2: 输入: "ccaabbb" 输…

linux nginx 图片服务器,搭建Nginx图片服务器(Linux)

wget http://nginx.org/download/nginx-1.19.1.tar.gzyum install gcc-cyum install -y pcre pcre-develyum install -y zlib zlib-develyum install -y openssl openssl-devel进入nginx目录./configure --prefix/usr/local/nginx --pid-path/var/run/nginx/nginx.pid --loc…

LeetCode 163. 缺失的区间

文章目录1. 题目2. 解题1. 题目 给定一个排序的整数数组 nums &#xff0c;其中元素的范围在 闭区间 [lower, upper] 当中&#xff0c;返回不包含在数组中的缺失区间。 示例&#xff1a;输入: nums [0, 1, 3, 50, 75], lower 0 和 upper 99, 输出: ["2", "…

小白学数据分析-----聚类分析理论之TwoSteps理论篇+实践篇

昨天分享了以前学习的聚类分析算法K-Means的部分知识&#xff0c;其实这个主要是了解一下这个算法的原理和适用条件就行了&#xff0c;作为应用而不是作为深入研究&#xff0c;能够很好的将业务和算法模型紧密结合的又有几人呢&#xff1f;所以一些基本知识还是很必要的&#x…

LeetCode 244. 最短单词距离 II(哈希map+set二分查找)

文章目录1. 题目2. 解题2.1 暴力超时2.2 哈希表set二分查找1. 题目 请设计一个类&#xff0c;使该类的构造函数能够接收一个单词列表。 然后再实现一个方法&#xff0c;该方法能够分别接收两个单词 word1 和 word2&#xff0c;并返回列表中这两个单词之间的最短距离。 您的方法…

从根本上解决 Infopath 2010 重复表的序号问题

经过多长期的查找资料&#xff0c;今天终于找到如何解决Infopath 重复表序号的问题&#xff0c;其实也很简单只用Xpath 语法就可以了 count(../preceding-sibling::*[local-name() "ExpensiveDetail"])1 ExpensiveDetail 是重复表的名字 转载于:https://www.cnblog…

linux怎么将进程调优到8,Linux的性能调优命令

性能调优一直是运维工程师最重要的工作之一&#xff0c;如果您所在的生产环境中遇到了系统响应速度慢&#xff0c;硬盘IO吞吐量异常&#xff0c;数据处理速度低于预期值的情况&#xff0c;又或者如CPU、内存、硬盘、网络等系统资源长期处于耗尽的状态&#xff0c;那么这篇文章将…

LeetCode 161. 相隔为 1 的编辑距离(DP/遍历)

文章目录1. 题目2. 解题2.1 DP超时2.2 一次遍历1. 题目 给定两个字符串 s 和 t&#xff0c;判断他们的编辑距离是否为 1。 注意&#xff1a; 满足编辑距离等于 1 有三种可能的情形&#xff1a; 往 s 中插入一个字符得到 t从 s 中删除一个字符得到 t在 s 中替换一个字符得到 …

Google搜索图片时只显示第一页

用Google搜索图片时出现&#xff0c;只显示第一页&#xff0c;其他页不能显示。 Method 1:未成功。 Method 2:成功。 结果图&#xff1a; 转载于:https://www.cnblogs.com/yfl-IT/archive/2012/06/19/2555429.html

pxe自动部署Linux,Kickstart+PXE自动部署CentOS6.6

生产环境中对于部署大量的相同系统的服务器&#xff0c;如果逐台安装操作系统的话是非常浪费时间的工作&#xff0c;还好CentOS提供了无人值守安装系统的功能&#xff0c;下面就详细介绍一下配置步骤。一、配置本机的yum源因为需要安装一些软件来达到我们的目的&#xff0c;所以…

LeetCode 247. 中心对称数 II(DP)

文章目录1. 题目2. 解题1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字&#xff08;或者上下颠倒地看&#xff09;。 找到所有长度为 n 的中心对称数。 示例 : 输入: n 2 输出: ["11","69","88","96"]来…

重新排列参数

重新排列参数 重新排列参数操作可以使你重新排列方法、索引器中的参数。你将方法的参数重新排列后&#xff0c;所有使用该方法的地方都会相应调整。以下面代码为例&#xff1a; class Person{public void Print(string name, int age, bool sex){}}class Program{static void M…