题目

给你一个字符串 s,以及该字符串中的一些「索引对」数组 pairs,

其中 pairs[i] = [a, b] 表示字符串中的两个索引(编号从 0 开始)。

你可以 任意多次交换 在 pairs 中任意一对索引处的字符。

返回在经过若干次交换后,s 可以变成的按字典序最小的字符串。

示例 1:输入:s = "dcab", pairs = [[0,3],[1,2]] 输出:"bacd"

解释: 交换 s[0] 和 s[3], s = "bcad"

交换 s[1] 和 s[2], s = "bacd"

示例 2:输入:s = "dcab", pairs = [[0,3],[1,2],[0,2]] 输出:"abcd"

解释:交换 s[0] 和 s[3], s = "bcad"

交换 s[0] 和 s[2], s = "acbd"

交换 s[1] 和 s[2], s = "abcd"

示例 3:输入:s = "cba", pairs = [[0,1],[1,2]] 输出:"abc"

解释:交换 s[0] 和 s[1], s = "bca"

交换 s[1] 和 s[2], s = "bac"

交换 s[0] 和 s[1], s = "abc"

提示:1 <= s.length <= 10^5

0 <= pairs.length <= 10^5

0 <= pairs[i][0], pairs[i][1] < s.length

s 中只含有小写英文字母

解题思路分析

1、并查集+排序;时间复杂度O(nlog(n)),空间复杂度O(n)

func smallestStringWithSwaps(s string, pairs [][]int) string {n := len(s)fa := make([]int, n)for i := 0; i < n; i++ {fa[i] = i}for i := 0; i < len(pairs); i++ {a, b := pairs[i][0], pairs[i][1]union(fa, a, b)}m := make(map[int][]int)for i := 0; i < len(s); i++ {target := find(fa, i)m[target] = append(m[target], i)}res := []byte(s)for _, v := range m {arr := make([]int, 0)for i := 0; i < len(v); i++ {arr = append(arr, int(s[v[i]]))}sort.Ints(arr)for i := 0; i < len(v); i++ {res[v[i]] = byte(arr[i])}}return string(res)}func union(fa []int, a, b int) {fa[find(fa, a)] = find(fa, b)}func find(fa []int, a int) int {for fa[a] != a {fa[a] = fa[fa[a]]a = fa[a]}return a}

总结

Medium题目,使用并查集分组,然后分组排序即可

怎么交换两个字符串_leetcode1202_go_交换字符串中的元素相关推荐

  1. PHP怎样交换两个数输出,PHP交换两个变量值

    方法一:交换两个变量的最简单方法是使用第三个临时变量<?php $a = 15; $b = 27; // 交换逻辑 echo " 交换前的数字为: "; echo " ...

  2. java交换两个变量的值_Java中交换两个整数变量的值

    需求 如下,我们定义了两个整数变量,并且分别进行了赋值,下面,我们需要实现的就是将x的值赋值给y,将y值赋值给x,实现x和y的值交换: int x = 100; int y = 200; 方法一:使用 ...

  3. 如何在vim中交换两个打开文件(在拆分中)的位置?

    本文翻译自:How can I swap positions of two open files (in splits) in vim? Assume I've got some arbitrary ...

  4. C语言练习之交换两个数组中的内容

    目录 前言 一.思路 二.源代码以及运行截图 源代码: 运行截图: 总结 前言 学习了数组的一些基本知识,因此进行这个练习,现在将我的思路和代码分享出来. 将数组A中的内容和数组B中的内容进行交换.( ...

  5. c语言指针交换字符串组,c语言 指针交换两个字符串

    其实这个题是要用结构把学生成绩输进去再根据程序排序再输出学生信息,我不知道怎么根据成绩大小把st[].name输出啊,我用了一个交换函数,change想交换st[j].name和st[j-1].nam ...

  6. 两个软件相互交换数据_面试需要知道的六种数据结构

    本文作者 拉勾教育专栏作者苏勇查看:13624回复:128 数据结构是算法的基石,若无扎实的数据结构基础,想把算法学好甚至融会贯通是非常困难的,而优秀的算法又往往取决于你采用哪种数据结构. --< ...

  7. PHP中不用第三个变量交换两个变量的值

    相信大家在PHP面试或者学习中经常会遇到这个问题就是"不用第三个变量来交换两个变量的值",今天正对这个问题来讨论一下: 第一种方法:首先会想到的 这种方法简单可行,顺利的交换了两个 ...

  8. 交换两个变量ab的值PHP,由[交换两个变量的值问题]理解程序的时空复杂度

    由一个编程经典问题,交换两个变量的值入手,理解程序的时空复杂度(以下均使用PHP代码演示问题的解决方法)解决问题的方法一:1.方法文字描述:使用一个中间变量temp,实现两个变量值的互换2.实现的具体 ...

  9. php比较两个变量的值_总结PHP不用第三个变量交换两个变量的值的几种方法

    "PHP不用第三个变量交换两个变量的值"这个题看到过好多次了,看来面试确实喜欢考这道题.今天,对于这个题目,我自己总结了几种方法,可能不全,大家来互相补充. 有些仅适用于字符串,方 ...

最新文章

  1. tensorflow笔记:多层CNN代码分析
  2. linux数组shell数组添加内容,shell数组的定义与应用
  3. 【LaTeX 语法】字母表示 ( 大写、小写、异体 希腊字母 | 粗体字母 | 花体字母 )
  4. 【haproxy初始化】init_haproxy.sh
  5. 《Linux内核设计与实现》读书笔记(十五)- 进程地址空间(kernel 2.6.32.60)
  6. 如何使用SAP APF里的过滤器
  7. Oracle 建立包 和 包体
  8. 标准库类型String,Vector
  9. sys.stdin.read和raw_input函数
  10. Nutanix企业云助力嘉里大通提升核心竞争力
  11. Redis命令——键(key)
  12. Huawei LiteOS 开发指南
  13. 迅雷极速与旋风的对比
  14. yii2 memcache 跨平台交互 键和值不一样
  15. php表单美化,使用css美化html表单控件详细示例(表单美化)_HTML/Xhtml_网页制作
  16. 小程序18问,3分钟快速了解小程序
  17. 基于遗传算法的TSP和MTSP问题求解(python)
  18. 北京专精特新企业申报攻略
  19. java-assured_rest-assured之获取响应数据(Getting Response Data)
  20. 动物识别系统代码python_动物识别系统 代码

热门文章

  1. 几种常用编程语言的编程思想和方法 转
  2. FATCAT桌面计算器即将出炉!
  3. python b64 图片处理
  4. PHP和mysql的长连接
  5. Exchange20132016删除默认邮箱数据库及移动数据库路径
  6. Python根据多个空格Split字符串
  7. 快速傅里叶变换(FFT)算法【详解】
  8. Video Player调研
  9. Java数据结构——解析算术表达式
  10. SolrCloud和MultiCore的区别