LeetCode 205. Isomorphic Strings

題目

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.

翻譯

給兩個字串s跟t,判斷他們是否是同構字。

如果他們是同構字,表示s裡面毎個字元都可以拿來對應t的特定字元。

全部的字元都要依順序被取代,而且s一種字元只會對應t一種字元,也可能對應到與自己相同的字元。

思路

需要兩個map,一個記錄s對t的對應關係,另外一個記錄t對s,如果字元沒在s中出現,加到map,出現過的話就拿出來跟t比對,不一致表示非同構字。

解題

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isIsomorphic = function(s, t) {
    // 使用map來記錄s,t的對應關係
    var mapS = {};
    var mapT = {};

    for(var i in s){
        var valueS = s[i];
        var valueT = t[i];

        // 如果這個字元還沒出現過,加到mapS中
        if(!mapS[valueS]){
            mapS[valueS] = valueT;
        } else if(mapS[valueS] != valueT) { 
            // 如果s字元出現過,比對t的字元使否與mapS中儲存的一樣
            return false;
        }

        if(!mapT[valueT]){
            mapT[valueT] = valueS;
        } else if(mapT[valueT] != valueS) { 
            return false;
        }
    }
    // 全部比對成功
    return true;
};

results matching ""

    No results matching ""