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;
};