• 1202. 交换字符串中的元素


    1202. 交换字符串中的元素

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

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

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

    示例 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"

    并查集

    并查集,是一种判断“远房亲戚”的算法。

    打个比方:你身边的某个“朋友”,很有可能就是你父亲的母亲的姑妈的大姨的哥哥的表妹的孙子的女儿的父亲的孙子。如果给定这么一张“家谱”(无向图),如何判断两个顶点是不是“亲戚”呢?用人话说,就是判断一个图中两个点是否联通(两个顶点相互联通则为亲戚)

    class Solution:
        def smallestStringWithSwaps(self, s: str, pairs: List[List[int]]) -> str:
            p={i:i for i in range(len(s))}    #初始化
            ans=["" for _ in range(len(s))]  
            def find(a):                            #合并
                while p[a]!=a:
                    p[a]=p[p[a]]
                    a=p[a]
                return p[a]
            def union(a,b):
                pa,pb=find(a),find(b)
                p[pa]=pb
            for a,b in pairs:
                union(a,b)
            group = defaultdict(list)
            for i in range(len(s)):
                group[find(i)].append(i)
            for i in group.values():
                sub=[s[k] for k in i]
                sub.sort()
                i.sort()
                for m,n in zip(sub,i):
                    ans[n]=m
            return "".join(ans)
  • 相关阅读:
    Docker私有仓库
    Docker入门
    HBase表的数据导出和导入
    HBase shell的使用记录
    Redis集群模式(Cluster)部署
    Oracle数据库sqlldr工具的使用
    oracle使用impdp和expdp导入导出数据
    Linux自动同步时间的方法
    Linux配置ssh免密码登陆
    Linux中逻辑卷(LV)的创建、增大和减小
  • 原文地址:https://www.cnblogs.com/lzk-seven/p/14261565.html
Copyright © 2020-2023  润新知