Mooo-star / fe-algorithm

0 stars 0 forks source link

同构字符串 #31

Open Mooo-star opened 1 month ago

Mooo-star commented 1 month ago

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

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

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

示例 1:

输入:s = "egg", t = "add" 输出:true 示例 2:

输入:s = "foo", t = "bar" 输出:false 示例 3:

输入:s = "paper", t = "title" 输出:true

Mooo-star commented 1 month ago

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isIsomorphic = function (s, t) {
    // 定义两个映射表
    const s2t = {};
    const t2s = {};
    const len = s.length;
    for (let i = 0; i < len; ++i) {

        // 得到每次遍历的数据
        const x = s[i], y = t[i];

        // 判断 hash 表中的数据映射是否正确
        // 映射不对直接 return false
        if ((s2t[x] && s2t[x] !== y) || (t2s[y] && t2s[y] !== x)) {
            return false;
        }

        // 映射正确 / 不存在当前的映射,定义映射关系
        s2t[x] = y;
        t2s[y] = x;

    }
    return true;
};