LeetCode每日一题,1202. Smallest String With Swaps
先看题目描述
大意就是给定一个字符串 s,数组 pairs 代表字符串的多个索引对,我们可以任意次数的交换索引对中索引对应的字母,让我们返回经交换后可以得到的最小字符串
算法思路
并查集
我们将可以互相交换的字符视为一个连通分量,一个连通分量内的字符可以任意的互相交换位置。于是我们可以通过给定的字符串 s 和数组 pairs,求出字符串的各连通分量,将各连通分量内的字符按照升序排列后,将字符串重新组装起来,然后返回组装的字符串即可
求连通分量我们可以通过并查集完成,而将连通分量内的字符按照升序排列,我们可以使用小根堆自动完成升序排列的过程
算法源码
并查集
将并查集部分的代码写好后,发现后面不知道该怎么写了,于是去看题解,才知道后面该怎么求连通分量,以及可以使用小根堆来将连通分量内字符自动按照升序排列,map.computeIfAbsent(root, key -> new PriorityQueue<>()).offer(cs[i]) 这种写法也是第一次见,值得学习
1 | class Solution { |