Skip to content

同构字符串 / isIsomorphic

题目描述

给定两个字符串 s 和 t ,判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。

不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

Code

javascript
function isIsomorphic(s, t) {
  const map = new Map();
  const map1 = new Map();
  for (let i = 0; i < s.length; i++) {
    if (map.has(s[i])) {
      if (map.get(s[i]) !== t[i]) {
        return false;
      }
    } else {
      map.set(s[i], t[i]);
      if (map1.has(t[i])) {
        return false;
      } else {
        // 添加到反向映射
        map1.set(t[i], s[i]);
      }
    }
  }
  return true;
}

Test Cases

javascript
const { isIsomorphic } = require('../docs/algo/string/isIsomorphic');

describe('isIsomorphic', () => {
  it('case1', () => {
    expect(isIsomorphic('badc', 'baba')).toBeFalsy();
  });
  it('case2', () => {
    expect(isIsomorphic('egg', 'add')).toBeTruthy();
  });
  it('case3', () => {
    expect(isIsomorphic('paper', 'title')).toBeTruthy();
  });
});