Leetcode 1202. 交换字符串中的元素 Golang解题

解题思路参照:
https://blog.csdn.net/qq_17550379/article/details/101281816

解题思路就是交并集的使用, 需要使用路径压缩算法进行优化
Golang版:

func smallestStringWithSwaps(s string, pairs [][]int) string {
     
    pre:=make([]int, len(s))
    for i:=0;i<len(s);i++{
     pre[i]=i}
    //相当于join的功能
    for _, v:= range pairs{
     
        x, y:=find(pre, v[0]), find(pre, v[1])
        if x!=y{
     pre[x]=y}
    }
    
    un:=make(map[int][]int)
    for i:=0;i<len(s);i++{
     
        x:=find(pre, i)
        if _,ok:=un[x];ok{
     
            un[x]=append(un[x], int(s[i]))
        }else{
     
            un[x]=append([]int{
     }, int(s[i]))
        }
    }
    for k, _ := range un{
     sort.Ints(un[k])}

    res := make([]byte, len(s))
    for i:=0;i<len(s);i++{
     
        x:=find(pre, i)
        res[i]=byte(un[x][0])
        un[x]=un[x][1:]
    }
    return string(res)
}


func find(pre []int, x int) int{
     
    r:=x
    for pre[x]!=x{
     
        x=pre[x]
    }
    //路径压缩
    i:=0
    for pre[r]!=x{
     
        i=pre[r]
        pre[r]=x
        r=i
    }
    return x
}

你可能感兴趣的:(LeetCode)