1
0

1061.go 826 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package main
  2. type UnionFind struct {
  3. parent []int
  4. }
  5. func NewUnionFind(n int) *UnionFind {
  6. uf := &UnionFind{parent: make([]int, n)}
  7. for i := 0; i < n; i++ {
  8. uf.parent[i] = i
  9. }
  10. return uf
  11. }
  12. func (uf *UnionFind) Find(x int) int {
  13. if uf.parent[x] != x {
  14. uf.parent[x] = uf.Find(uf.parent[x])
  15. }
  16. return uf.parent[x]
  17. }
  18. func (uf *UnionFind) Unite(x, y int) {
  19. x, y = uf.Find(x), uf.Find(y)
  20. if x == y {
  21. return
  22. }
  23. if x > y {
  24. x, y = y, x
  25. }
  26. // 总是让字典序更小的作为集合代表字符
  27. uf.parent[y] = x
  28. }
  29. func smallestEquivalentString(s1 string, s2 string, baseStr string) string {
  30. uf := NewUnionFind(26)
  31. for i := 0; i < len(s1); i++ {
  32. uf.Unite(int(s1[i]-'a'), int(s2[i]-'a'))
  33. }
  34. res := []byte(baseStr)
  35. for i := range res {
  36. res[i] = byte('a' + uf.Find(int(res[i]-'a')))
  37. }
  38. return string(res)
  39. }
备用站点 当前处于降级运行的备用站点,仅供应急访问,数据和功能可能不是最新。