Answer

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'));

Report Page