// export function isIsomorphic(s: string, t: string): boolean {
//   let ht: Record<string, string> = {};
//   let ht2: Record<string, string> = {};
//   if (s.length !== t.length) return false;

//   for (let [index, key] of Object.entries(s)) {
//     const currentValue = t[index];
//     if (key in ht && currentValue !== ht[key]) return false;
//     if (currentValue in ht2 && key !== ht2[currentValue]) return false;

//     ht[key] = currentValue;
//     ht2[currentValue] = key;
//   }

//   return true;
// }

// etalon
export function isIsomorphic(s: string, t: string): boolean {
  let sMap = {};
  let tMap = {};

  for (let i = 0; i < s.length; i++) {
    if (sMap[s[i]] && sMap[s[i]] !== t[i]) {
      return false;
    }

    if (tMap[t[i]] && tMap[t[i]] !== s[i]) {
      return false;
    }

    sMap[s[i]] = t[i];
    tMap[t[i]] = s[i];
  }
  return true;
}
