Answer
t.me/js_testОтвет:
const isIsomorphicStrings = (S, T) => {
if (S.length != T.length) {
return false;
}
var map1 = new Map();
var map2 = new Map();
for (let i = 0; i < S.length; i++) {
const c1 = S[i];
const c2 = T[i];
if (map1.has(c1)) {
if (c2 != map1.get(c1)) return false;
} else {
if (map2.has(c2)) return false;
map1.set(c1, c2);
map2.set(c2, c1);
}
}
return true;
};
Обьяснение:
Для решения этой задачи можно воспользоваться двумя хэш-таблицами, 1я будет хранить соответствие букв по 1му слову, 2я таблица — по 2му слову.
То есть на i-м шаге мы запоминаем, что s[i] символу соот-т символ t[i] и наооборот. Если на следующих шагах мы встретим любое не соот-ве по уже записанным данным из хэш-таблиц, то строки s и t не являются изоморфными.
Также очевидно, что строки с разной длиной не являются изоморфными.
Код для проверки:
const isIsomorphicStrings = (S, T) => {
if (S.length != T.length) {
return false;
}
var map1 = new Map();
var map2 = new Map();
for (let i = 0; i < S.length; i++) {
const c1 = S[i];
const c2 = T[i];
if (map1.has(c1)) {
if (c2 != map1.get(c1)) return false;
} else {
if (map2.has(c2)) return false;
map1.set(c1, c2);
map2.set(c2, c1);
}
}
return true;
};
console.log(isIsomorphicStrings('egg', 'add'));
console.log(isIsomorphicStrings('foo', 'bar'));