地址  https://leetcode-cn.com/contest/weekly-contest-155/problems/smallest-string-with-swaps/

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

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

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

示例 :

输入:s = "dcab", pairs = [[,],[,]]
输出:"bacd"
解释:
交换 s[] 和 s[], s = "bcad"
交换 s[] 和 s[], s = "bacd"
示例 : 输入:s = "dcab", pairs = [[,],[,],[,]]
输出:"abcd"
解释:
交换 s[] 和 s[], s = "bcad"
交换 s[] 和 s[], s = "acbd"
交换 s[] 和 s[], s = "abcd"
示例 : 输入:s = "cba", pairs = [[,],[,]]
输出:"abc"
解释:
交换 s[] 和 s[], s = "bca"
交换 s[] 和 s[], s = "bac"
交换 s[] 和 s[], s = "abc"

这个使用的并查集用来解决 在一类的索引查找

后面字符串的排序和索引排序 需要注意下

class Solution {
public:
int p[] = {-}; //存储每个点的祖宗节点 // 返回x的祖宗节点
int find(int x)
{
if (p[x] != x) p[x] = find(p[x]);
return p[x];
} string smallestStringWithSwaps(string s, vector<vector<int>>& pairs) {
for (int i = ; i <= s.size(); i ++ ) p[i] = i;
for(int i = ; i < pairs.size();i++){
int a = pairs[i][];
int b = pairs[i][];
p[find(a)] = find(b);
} //================================
int n = s.size();
vector<vector<int>> idx(n);
vector<string> ss(n); for(int i = ; i < n;i++){
int id = find(i);
idx[id].push_back(i);
ss[id].push_back(s[i]);
} for(int i =; i < n;i++){
sort(ss[i].begin(),ss[i].end());
for(int k = ;k < idx[i].size();k++){
s[idx[i][k]] = ss[i][k];
}
} return s;
}
};

leetcode 5199. 交换字符串中的元素的更多相关文章

  1. LeetCode:反转字符串中的元音字母【345】

    LeetCode:反转字符串中的元音字母[345] 题目描述 编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "h ...

  2. C#版(击败97.76%的提交) - Leetcode 557. 反转字符串中的单词 III - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...

  3. leetcode python反转字符串中的单词

    # Leetcode 557 反转字符串中的单词III### 题目描述 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. **示例1:** 输入: "L ...

  4. LeetCode.1170-比较字符串中最小字符的出现频率(Compare Strings by Frequency of the Smallest Char)

    这是小川的第412次更新,第444篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第263题(顺位题号是1170).在一个非空字符串s上定义一个函数f(s),该函数计算s中最小字 ...

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

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

  6. Leetcode 345. 反转字符串中的元音字母 By Python

    编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leet ...

  7. leetCode 题解之字符串中第一个不重复出现的字符

    1.题目描述 Given a string, find the first non-repeating character in it and return it's index. If it doe ...

  8. Leetcode 557. 反转字符串中的单词 III

    1.题目描述 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" ...

  9. Leetcode 557.反转字符串中的单词III

    反转字符串中的单词III 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest ...

随机推荐

  1. windows系统搭建zookeeper

    安装&配置 在apache的官方网站提供了好多镜像下载地址,然后找到对应的版本 下载地址: http://mirrors.cnnic.cn/apache/zookeeper/zookeeper ...

  2. facl 用户以及Linux 终端

    FACL : Filesystem Access Control List 利用文件扩展保存额外的访问控制权限setfacl -b:Remove all -m:设定 u:UID:perm g:GID: ...

  3. thinkphp6安装报错,composer install tp6 报错 Parse error: syntax error

    composer install thinkphp6 报错 Parse error: syntax error, unexpected ':', expecting '{' in vendor\top ...

  4. spring data JPA entityManager查询 并将查询到的值转为实体对象

    spring data JPA entityManager查询 并将查询到的值转为实体对象 . https://blog.csdn.net/qq_34791233/article/details/81 ...

  5. [考试反思]1110csp-s模拟测试108:消遣

    是套废题.T1题面错了,T2细节多而暴力>部分分,T3题目错了. T1:打表 题面应该是输出差值期望而不是答案值期望. 看到题目,果断打表. 答案就是所有值差之和除2的k次方. #include ...

  6. Markdown数学公式语法

    详细网址:Markdown数学公式语法

  7. STM32F429的新版用户手册更新记录, 改进、交流(2019-08-18发布V0.9版本)

    2019-06-16 发布首版V0.1 2019-06-23 发布V0.2版本 新增章节: 第3章 STM32F429 整体把控 第4章 STM32F429 工程模板建立(MDK5) 第5章 STM3 ...

  8. Glide生命周期原理

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/uTv44vJFFJI_l6b5YKSXYQ作者:连凌能 Android App中图片的展示是很 ...

  9. gitlab runner使用docker报错(x509: certificate signed by unknown authority)定位

    如果gitlab runner使用docker,docker是普通配置,配置好后,runner就可以正常执行任务了. 另外一个环节Docker配置了tls加密连接,添加runner后,runner的配 ...

  10. php中Session使用方法详解

    Session的声明与使用 Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_start().session_start()函数的语法格式如下: Bool sess ...