You are given two strings of the same length s1
and s2
and a string baseStr.
We say s1[i]
and s2[i]
are equivalent characters.
- For example, if
s1 = "abc"
ands2 = "cde"
, then we have'a' == 'c'
,'b' == 'd'
, and'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 s1 = "abc"
and s2 = "cde"
, "acd"
and “aab” are equivalent strings of baseStr = "eed"
, and "aab"
is the lexicographically smallest equivalent string of baseStr
.
Return the lexicographically smallest equivalent string of baseStr
by using the equivalency information from s1
and s2
.
Input: s1 = "parker", s2 = "morris", baseStr = "parser" Output: "makkek" Explanation: Based on the equivalency information in s1 and s2, 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".
Solution
/**
* @param {string} s1
* @param {string} s2
* @param {string} baseStr
* @return {string}
*/
var smallestEquivalentString = function (s1, s2, baseStr) {
//set new array for the 26 characters
let arr = new Array(26);
//fill the array with the characters
for (let i = 0; i < arr.length; i++) {
arr[i] = String.fromCharCode(i + 97);
}
//loop through the s1 and s2
for (let i = 0; i < s1.length; i++) {
let f = arr[s1[i].charCodeAt(0) - 97];
let s = arr[s2[i].charCodeAt(0) - 97];
if (f == s) continue;
let replaceTo = "";
let replaceFrom = "";
//replace the smaller character with the bigger character
if (f > s) {
replaceTo = s;
replaceFrom = f;
}
//replace the bigger character with the smaller character
else {
replaceTo = f;
replaceFrom = s;
}
//loop through the array and replace the bigger character with the smaller character
for (let i = 0; i < arr.length; i++) {
if (arr[i] == replaceFrom) arr[i] = replaceTo;
}
}
let res = "";
//loop through the baseStr and replace the characters with the equivalent characters
for (let i = 0; i < baseStr.length; i++) {
res += arr[baseStr.charCodeAt(i) - 97];
}
return res;
};