Skip to content

Prepare For Coder Interview – Denny

  • Basic
  • Medium
  • Hard
  • Architect
  • Life

LeetCode: Lexicographically Smallest Equivalent String

Posted on August 26, 2019July 26, 2020 by braindenny

Lexicographically Smallest Equivalent String



Similar Problems:

  • CheatSheet: Leetcode For Code Interview
  • CheatSheet: Common Code Problems & Follow-ups
  • Tag: #linkedlist

Given strings A and B of the same length, we say A[i] and B[i] are equivalent characters. For example, if A = “abc” and B = “cde”, then we have ‘a’ = 'c', 'b' = ‘d’, ‘c’ == ‘e’.

Equivalent characters follow the usual rules of any equivalence relation:

Reflexivity: ‘a’ = 'a'
Symmetry: 'a' =
‘b’ implies ‘b’ = 'a'
Transitivity: 'a' =
‘b’ and ‘b’ = 'c' implies 'a' = ‘c’
For example, given the equivalency information from A and B above, S = “eed”, “acd”, and “aab” are equivalent strings, and “aab” is the lexicographically smallest equivalent string of S.

Return the lexicographically smallest equivalent string of S by using the equivalency information from A and B.

Example 1:

Input: A = "parker", B = "morris", S = "parser"
Output: "makkek"
Explanation: Based on the equivalency information in A and B, we can group their characters as [m,p], [a,o], [k,r,s], [e,i]. The characters in each group are equivalent and sorted in lexicographical order. So the answer is "makkek".

Example 2:

Input: A = "hello", B = "world", S = "hold"
Output: "hdld"
Explanation:  Based on the equivalency information in A and B, we can group their characters as [h,w], [d,e,o], [l,r]. So only the second letter 'o' in S is changed to 'd', the answer is "hdld".

Example 3:

Input: A = "leetcode", B = "programs", S = "sourcecode"
Output: "aauaaaaada"
Explanation:  We group the equivalent characters in A and B as [a,o,e,r,s,c], [l,p], [g,t] and [d,m], thus all letters in S except 'u' and 'd' are transformed to 'a', the answer is "aauaaaaada".

Note:

  1. String A, B and S consist of only lowercase English letters from ‘a’ – ‘z’.
  2. The lengths of string A, B and S are between 1 and 1000.
  3. String A and B are of the same length.

Github: code.dennyzhang.com

Credits To: leetcode.com

Leave me comments, if you have better ways to solve.


  • Solution:
// https://code.dennyzhang.com/lexicographically-smallest-equivalent-string
// Basic Ideas: Unionfind
//
// Complexity: Time O(n), Space O(n)
type UF struct {
    parent []int
}

func constructor(size int) UF {
    parent := make([]int, 26)
    for i, _ := range parent {
        parent[i] = i
    }
    return UF{parent:parent}
}

func (uf *UF) union(x, y int) {
    p, q := uf.find(x), uf.find(y)
    if p<q {
        uf.parent[q] = p
    } else {
        uf.parent[p] = q
    }
}

func (uf *UF) find(x int) int {
    for uf.parent[x] != x {
        x = uf.parent[x]
    }
    return x
}

func smallestEquivalentString(A string, B string, S string) string {
    uf := constructor(26)
    for i:=0; i<len(A); i++ {
        p, q := int(rune(A[i])-'a'), int(rune(B[i])-'a')
        fmt.Println(p, q)
        uf.union(p, q)
    }
    res := make([]rune, len(S))
    for i, ch := range S {
        res[i] = rune(uf.find(int(ch-'a'))+'a')
    }
    return string(res)
}
linkedin
github
slack

Post Views: 0
Posted in MediumTagged unionfind

Post navigation

LeetCode: Path In Zigzag Labelled Binary Tree
LeetCode: Zigzag Iterator

Leave a Reply Cancel reply

Your email address will not be published.

Tags

#array #backtracking #bfs #binarytree #bitmanipulation #blog #classic #codetemplate #combination #dfs #dynamicprogramming #game #graph #greedy #heap #inspiring #interval #linkedlist #manydetails #math #palindrome #recursive #slidingwindow #stack #string #subarray #trie #twopointer #twosum binarysearch editdistance hashmap intervaldp knapsack monotone oodesign presum rectangle redo review rotatelist series sql treetraversal unionfind

Recent Posts

  • a
  • a
  • a
  • a
  • a

Recent Comments

    Archives

    Categories

    • Amusing
    • Basic
    • Easy
    • Hard
    • Life
    • Medium
    • Resource
    • Review
    • Series
    • Uncategorized
    Proudly powered by WordPress | Theme: petals by Aurorum.