题目链接


用并查集维护相互可以交换的索引,然后同一并查集上的字符放到小顶堆,每次取堆顶的字符重构字符串。

class Solution {public:string smallestStringWithSwaps(string s, vector<vector<int>>& pairs) {int n = s.size();int m = pairs.size();unordered_map<int, priority_queue<char, vector<char>, greater<char>>> mp(n);vector<int> fa(n);iota(fa.begin(), fa.end(), 0);for (int i = 0; i < m; ++i) {merge(fa, pairs[i][0], pairs[i][1]);}for (int i = 0; i < n; ++i) {int fi = find(fa, i);mp[fi].push(s[i]);}string ret;for (int i = 0; i < n; ++i) {int fi = find(fa, i);ret += mp[fi].top();mp[fi].pop();}return ret;}int find(vector<int> &fa, int x) {return fa[x] = x == fa[x] ? x : find(fa, fa[x]);}void merge(vector<int> &fa, int x, int y) {fa[find(fa, x)] = find(fa, y);}
};

并查集 - 交换字符串中的元素相关推荐

  1. leetcode 1202. 交换字符串中的元素(并查集)

    给你一个字符串 s,以及该字符串中的一些「索引对」数组 pairs,其中 pairs[i] = [a, b] 表示字符串中的两个索引(编号从 0 开始). 你可以 任意多次交换 在 pairs 中任意 ...

  2. 怎么交换两个字符串_leetcode1202_go_交换字符串中的元素

    题目 给你一个字符串 s,以及该字符串中的一些「索引对」数组 pairs, 其中 pairs[i] = [a, b] 表示字符串中的两个索引(编号从 0 开始). 你可以 任意多次交换 在 pairs ...

  3. Leetcode-5199 Smallest String With Swaps(交换字符串中的元素)

    1 #define _for(i,a,b) for(int i = (a);i < b;i ++) 2 #define _rep(i,a,b) for(int i = (a);i > b; ...

  4. python 替换字符串中的元素

    python 替换字符串中的元素 def str_replace(old_str,old,new):"""在 old_str 字符串中,把 old 替换成 new:par ...

  5. 【自制工具类】Java删除字符串中的元素

    这几天做项目需要把多个item的id存储到一个字符串中,保存进数据库.保存倒是简单,只需要判断之前是否为空,如果空就直接添加,非空则拼接个"," 所以这个字符串的数据结构是这样的 ...

  6. 并查集:集合合并与元素查找

    专注前端与算法的系列干货分享,欢迎关注(¬‿¬): 「微信公众号:心谭博客」| xin-tan.com | GitHub 1. 什么时候需要并查集? 在一些有 N 个元素的集合应用问题中,我们通常是在 ...

  7. gsoc 任务_gsoc20第3集从谱线中识别元素

    gsoc 任务 在上一集 (On the Previous Episode) In my last article in this series, I told you that I was deve ...

  8. hdu 1116 欧拉回路 并查集 一组字符串能否首尾相连成一个字符串

    主要是欧拉回路的基础知识,用并查集加工处理 注意欧拉回路和并查集的细节判断 不能粘贴复制,一定要理解之后再敲一遍代码,否则浪费更多的时间 #include <stdio.h> #inclu ...

  9. java交换数组元素_交换数组中的元素(Java)

    是否有任何Java中的数组预定义的方法与哪个可以 直接交换两个元素? 默认Java API没有任何交换数组元素的函数.但是,您可以使用Collections.swap(list, index1, in ...

最新文章

  1. android 事件驱动编程,跟我学android之四 事件驱动模型
  2. 自定义InputFormat案例
  3. linux 密码记录文件 .netrc 简介
  4. linux5.8不能上网,Ubuntu 8.04不能上网的问题的解决方法
  5. 【转】 DOTA2中的伪随机及其lua实现
  6. 基于Xml 的IOC 容器-载入<bean>元素
  7. 阮一峰react demo代码研究的学习笔记 - React demo1 debug - how is jsx converted to js
  8. 使用gulp-connect实现web服务器
  9. 没错,继事理图谱后,我们又搞事情了:数地工场自然语言处理语义开放平台正式对外发布!
  10. nohup 与 linux 程序后台执行
  11. mysql 页面跳转_Springboot+MyBatis+mysql+jsp页面跳转详细示例
  12. 浅谈App-V(附:参考资料)
  13. 使用scp从远程服务器下载文件到本地
  14. java applet的方法_Java Applet的常用方法
  15. 百度一面 / 二面 总结
  16. 服务器新建虚拟机不识别u盘,虚拟机无法识别u盘如何解决_虚拟机中无法识别u盘的处理办法...
  17. 宠物小精灵之收服(二维01背包)
  18. 数据库如何转身云原生数据库
  19. 力扣383.赎金信(java语言散列表法)
  20. C++下的OpenCV中Mat类型存储的图像格式

热门文章

  1. 在VS2012中安装使用cppcheck
  2. DWR第六篇之文件下载
  3. 使用wlan接收器经常重新登录怎么办
  4. TCP/IP详解学习笔记(2)-数据链路层
  5. Visual C++ 的代码折叠
  6. TrackViewState到底是干什么的
  7. nginx 启动问题:nginx (pid ) already running.
  8. [Python从零到壹] 八.数据库之MySQL和Sqlite基础知识及操作万字详解
  9. [python学习] 模仿浏览器下载CSDN源文并实现PDF格式备份
  10. LeetCode Algorithm 590. N 叉树的后序遍历