6月30日算法日记

90 阅读1分钟

1.同构字符串

image-20220630215921183

解法

1.哈希表

思路

  1. 使用两张hash表存储两字符串之间的对应关系,s1表和t1表,在在for循环中遍历,如果出现当前元素已经存在并且该元素的映射不为hash表中所记录的对应映射关系(两表需要相互映射),就说明不能构成同构字符串
  2. 这里需要用到对象的动态属性进行判断,另外使用x和y保存当前遍历数组元素的值,将s1[x] = y和t1[y] = x进行赋值操作,那么二者互相就拥有映射关系了。之后如果在循环中再次找到s1[x]属性并且该属性对应的映射不为y的话,则字符串不能同构
var isIsomorphic = function(s, t) {
    let s1 = {}
    let t1 = {}
    let n = s.length
    for(let i = 0; i < n; i++) {
        const x = s[i], y = t[i]
        if(s1[x] && s1[x] != y || t1[y] && t1[y] != x) return false
        s1[x] = y
        t1[y] = x
    }
    return true
};