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
}
发布了3 篇原创文章 · 获赞 0 · 访问量 94

猜你喜欢

转载自blog.csdn.net/wccms/article/details/104528132