1202. 交换字符串中的元素
字符串 元素 交换
2023-06-13 09:17:10 时间
解题思路
首先处理 pairs,可以将数组分成多个连通块 然后每个连通块分别排序 这里由于 s 中只有 小写字母, 所以排序可以利用桶排序的思想
复杂度分析 时间复杂度:O(n),桶排序所需时间 空间复杂度:O(n)
代码
class Solution {
int[] p = new int[(int)2e5 + 10];
private int find(int x) {
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
public String smallestStringWithSwaps(String s, List<List<Integer>> pairs) {
int[][] map = new int[s.length()][26];
for (int i = 0; i < p.length; i++) p[i] = i;
for (List<Integer> pp : pairs) {
int px = find(pp.get(0));
int py = find(pp.get(1));
p[px] = py;
}
for (int i = 0; i < s.length(); i++) {
map[find(i)][s.charAt(i) - 'a']++;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < map.length; i++) {
int[] table = map[find(i)];
for (int k = 0; k < table.length; k++) {
if (table[k] > 0) {
sb.append((char) (k + 'a'));
table[k]--;
break;
}
}
}
return sb.toString();
}
}
相关文章
- php替换字符串中,PHP 替换字符串中的一些字符方法介绍
- python字符串删除指定符号(不限位置)「建议收藏」
- Python 列表元素字符串转浮点
- 刷题错题录2-向上取整、三角形条件、字符串拼接匹配、三数排序思路
- C# 中List与json字符串的相互转换「建议收藏」
- js判断字符串数组是否包含某个字符串_怎么判断数组有几个元素
- Go字符串操作不是你想的那么简单!
- JavaScript刷LeetCode-字符串类解题技巧4
- sqlserver、mysql获取连接字符串步骤
- Java的整个字符串的结束索引在最后一个字符之外详解编程语言
- Mybatis if test 字符串比较不生效详解编程语言
- python3 isinstance()判断元素是否是字符串、int型、float型详解编程语言
- Go语言遍历字符串——获取每一个字符串元素
- MySQL中实现字符串转换的方法(mysql字符串转换)
- 解决MySQL字符串乱码的有效方法(mysql字符串乱码)
- Linux字符串操作:把空格当做一种不可分割的元素(linux字符串空格)
- Oracle SQL 实战字符串截取技巧(oracle。sql截取)
- Linuxfgetcsv取得的数组元素为空字符串的解决方法
- 利用jquery的获取JS文件中的字符串内容
- json对象转字符串如何实现
- 正则删除字符串左、右或两端的空格经验总结
- php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)