美文网首页
205. Isomorphic Strings

205. Isomorphic Strings

作者: exialym | 来源:发表于2016-09-21 22:47 被阅读15次

    Given two strings s and t, determine if they are isomorphic.

    Two strings are isomorphic if the characters in s can be replaced to get t.

    All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself.

    For example,
    Given "egg", "add", return true.

    Given "foo", "bar", return false.

    Given "paper", "title", return true.

    Note:
    You may assume both s and t have the same length.

    最开始的想法是使用一个Map1来记录映射关系,一个Map2纪录在t中字母是不是已经被使用过
    如果是之前s中没出现过的字母:
    ——检查这个字母在t中的映射是不是被使用过了:
    ————如果没有,就在Map1中纪录这个映射关系,并在Map2中纪录t中这个字母已经使用过了
    ————如果使用过了,那就代表出现了重复映射,返回false
    如果是出现过的:
    ——检查是否符合映射关系

    /**
     * @param {string} s
     * @param {string} t
     * @return {boolean}
     */
    var isIsomorphic = function(s, t) {
        var map = {};
        var used = {};
        var num = s.length;
        for (var i = 0; i<num;i++) {
            var temp = s.charCodeAt(i)-t.charCodeAt(i);
            if (map[s[i]]===undefined) {
                if (used[t[i]]===undefined) {
                    map[s[i]] = temp;
                    used[t[i]] = true;
                } else
                    return false;
            }   
            else {
                if (temp!==map[s[i]])
                    return false;
            }
        }
        return true;
    }
    

    另一种方法比较巧,使用两个对象,一个纪录s中字母出现的位置,一个纪录t中字母出现的位置。
    同时循环这两个字符串,每一步,检查相同位置上的字母上次出现的位置是否相同,如果相同,就保证了已经检查过的字符串是符合要求的。如果这两个字母上次出现的位置是不同的,那现在出现在了相同的位置,那就不对了。
    这里有一点可以优化的,当确认当前检查的字母是已经出现过的,且符合映射关系的时候,就不需要纪录当前元素的位置了,因为我们需要的仅仅是映射信息,第一次出现的时候我们就有这个信息了。
    '''
    var isIsomorphic = function(s, t) {
    var ss = {};
    var ts = {};
    var num = s.length;
    for (var i = 0; i<num;i++) {
    if(ss[s[i]] != ts[t[i]]) return false;
    else if(!ts[t[i]]) //only record once
    {
    ss[s[i]] = i;
    ts[t[i]] = i;
    }

    }
    return true;
    

    };

    '''

    相关文章

      网友评论

          本文标题:205. Isomorphic Strings

          本文链接:https://www.haomeiwen.com/subject/bgzlettx.html