原題鏈接:
https://leetcode.cn/problems/isomorphic-strings/
理解題意:
-
s = "foo"
和t = "bar"
拆檬,s
中的o
同時映射了a
和r
洪己,不正確 -
s = "badc"
和t = "baba"
,t
中的a
同時映射了a
和c
秩仆,不正確 - 因此需要同時檢查
s
到t
和t
到s
的映射關(guān)系
解題思路:
- 用兩個
Map
码泛,分別存儲s -> t
和t -> s
的映射關(guān)系 - 遍歷字符串,查看
Map
中存儲的映射關(guān)系是否與遍歷到的字符不同澄耍,出現(xiàn)不同就表示兩個字符串不是同構(gòu)的 - 如果正常退出循環(huán)噪珊,表示沒意義找到不同的映射關(guān)系,兩個字符串是同構(gòu)的
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isIsomorphic = function(s, t) {
const maps2t = new Map() // 存儲s到t的映射關(guān)系
const mapt2s = new Map() // 存儲t到s的映射關(guān)系
// 遍歷每個字符齐莲,對比它們之間的映射關(guān)系
for (let i = 0; i < s.length; i++) {
// 如果s[i]到t[i]的映射痢站,以及t[i]到s[i]的映射出現(xiàn)不相同的情況
// 表示出現(xiàn)一個字符可以映射到兩個不同字符,返回false
if (
(maps2t.has(s[i]) && maps2t.get(s[i]) !== t[i]) ||
(mapt2s.has(t[i]) && mapt2s.get(t[i]) !== s[i])
) {
return false
}
// 每次循環(huán)都存儲一次映射關(guān)系
maps2t.set(s[i], t[i])
mapt2s.set(t[i], s[i])
}
// 如果沒有找到錯誤的映射關(guān)系选酗,正常退出循環(huán)阵难,表示每個字符都能正常映射
return true
};