题目:
难度:Easy
相关话题:哈希表
给定两个字符串s 和t ,判断它们是否是同构的。
如果s 中的字符可以被替换得到t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
示例 1:
输入: *s* = "egg", *t =*"add"
输出: true
示例 2:
输入: *s* = "foo", *t =*"bar"
输出: false
示例 3:
输入: *s* = "paper", *t =*"title"
输出: true
说明: 你可以假设s 和 t 具有相同的长度。
思路:
用数字替换字母,并且用hash
储存,遇到hash
中不存在的字母则字母作为key
,数字+1
作为val
。
如果两边同时遇到hash
中不存在的,同时将以当前数字作为val
;
如果两边同时遇到hash
中都存在的,检测两边的val
是否相等;
如果一边存在,一边不存在,返回false
。
/**
* @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
* @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isIsomorphic = function(s, t) {
let uniq=1
let hash1={},hash2={}
for(let i=0;i<s.length;i++){
let curS=s[i],curT=t[i]
if(!hash1[curS] && !hash2[curT]){
hash1[curS]=uniq
hash2[curT]=uniq
uniq++
}else if(hash1[curS] && hash2[curT]){
if(hash1[curS]!==hash2[curT])return false
}else return false
}
return true
};