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
.
Example 1:
Input: s = "egg", t = "add"Output: true
Example 2:
Input: s = "foo", t = "bar"Output: false
Example 3:
Input: s = "paper", t = "title"Output: true
Note: You may assume both s and t have the same length.
方法一: 字典哈希
字典 map
构建 s 中字符串与 t 中字符串(以及 t 中字符串与 s 中字符串)的映射关系;一对多
的情况, 则 s 与 t 不是同构的;一对多: 比如 s 为 'aa', t 为 'ab', 此时 ’a' 字符就对应了 'a'、'b' 两个字符, 即为一对多。
/*** @param {string} s* @param {string} t* @return {boolean}*/var isIsomorphic = function(s, t) {const mapS = new Map()const mapT = new Map()for (let i = 0; i < s.length; i++) {const getS = mapS.get(s[i])const getT = mapT.get(t[i])if ((getS && getS !== t[i]) || (getT && getT !== s[i])) {return false}mapS.set(s[i], t[i])mapT.set(t[i], s[i])}return true}
方法二: 判断 s 与 t 字符串中字符出现的第一个位置。(针对本题的巧妙解法, 不过推荐优先掌握方法一)
/*** @param {string} s* @param {string} t* @return {boolean}*/var isIsomorphic = function(s, t) {for (let i = 0; i < s.length; i++) {if (s.indexOf(s[i]) !== t.indexOf(t[i])) {return false}}return true};
202、242、290、349、350、451