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 }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- leetCode 87.Scramble String (拼凑字符串) 解题思路和方法
- leetCode 27.Remove Element (删除元素) 解题思路和方法
- 【leetcode】24. Swap Nodes in Pairs - 成对交换链表元素
- golang_算法: leetcode_字符串03-字符串中的第一个唯一字符
- Leetcode 28.Implement strStr() 解题报告【C库函数strstr()模拟-字符串中子串首次出现的地址】
- golang_算法: leetcode_字符串05-验证回文字符串
- LeetCode 14. Longest Common Prefix--字符串数组元素的最长公共前缀
- LeetCode解题记录(24)——两两交换链表中的节点
- leetcode 05 最长相同元素之间的的最大字符串 && 06 Z形字符串排序
- leetcode解题之219 # Contains Duplicate II Java版 (数组中出现重复元素)
- leetcode解题之226# Invert Binary Tree Java版 (交换树的左右子树)
- Leetcode 777 在LR字符串中交换相邻字符 (C++题解)
- Leetcode 347. 前K个高频元素 解题思路及C++实现
- 【LeetCode91-100】编码种数,逆转单链表,IP地址转化,中序遍历二叉树,生成二叉搜索树,计算二叉树个数,交叉string【hard】,判断二叉搜索树是否合法,恢复二叉树(有两个元素被交换)
- Leetcode 481. Magical String 魔幻字符串 解题报告
- leetCode 27.Remove Element (删除元素) 解题思路和方法
- leetCode 24. Swap Nodes in Pairs (双数交换节点) 解题思路和方法
- leetcode解题之203 # Remove Linked List Elements Java版(删除链表中的和val相等的元素)
- leetcode之一题学会Golang字符串怎么用
- Leetcode 434. Number of Segments in a String 字符串的分段 解题报告