原文:205. 同构字符串(leetcode 解题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-0205/

题目:

难度:Easy

相关话题:哈希表

给定两个字符串st ,判断它们是否是同构的。

如果s 中的字符可以被替换得到t ,那么这两个字符串是同构的。

所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

示例 1:

输入: *s* = "egg", *t =*"add"
输出: true

示例 2:

输入: *s* = "foo", *t =*"bar"
输出: false

示例 3:

输入: *s* = "paper", *t =*"title"
输出: true

说明: 你可以假设st 具有相同的长度。


思路:

用数字替换字母,并且用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
};