您的位置:首页 > 编程语言 > Go语言

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

2020-04-03 07:29 1436 查看

解题思路参照:
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
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
wccms 发布了5 篇原创文章 · 获赞 0 · 访问量 225 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐