前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1202. 交换字符串中的元素

1202. 交换字符串中的元素

作者头像
小炜同学
发布2023-02-23 09:13:26
4970
发布2023-02-23 09:13:26
举报
文章被收录于专栏:Java领域客栈

解题思路

首先处理 pairs,可以将数组分成多个连通块 然后每个连通块分别排序 这里由于 s 中只有 小写字母, 所以排序可以利用桶排序的思想

复杂度分析 时间复杂度:O(n),桶排序所需时间 空间复杂度:O(n)

代码

代码语言:javascript
复制
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();

    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023年02月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解题思路
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档