同构字符串-js

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

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

输入:s = “paper”, t = “title”
输出:true

思路:遍历每一个字符,当有重复字符的时候,当相同字符第二次出现,若是同构,则s与t中的下标位置应该是相同的,直接判断下标即可
let s = “foo”,
t = “bar”;

    let temp = true;
    for (let i = 0; i < s.length; i++) {
        let a = s.indexOf(s[i])
        let b = t.indexOf(t[i])
        if (a != b) {
            temp = false
        }

    }
    return temp

再次做的时候 果然又忘了 用了另外一种方法

思路:遍历同时存储在两个map 里边,当遇到相同的字符的时候,首先找到s中已经存储的value 是否与当前遍历得到的t中的内容一样,
如果一样则说明是一样的,如果不一样 则说明是不同的

var s = “badc”, t = ‘baba’
if (s.length != t.length) {
return
}
var arr = new Map()
var arrW = new Map()
for (let item in s) {
if (arr.has(s[item])) {
// 如果前边已经存在过此字符 则取获取此字符
// 判断这个字符是不是跟t中的对应位置的字符一样,一样则没有问题
// 存储了两个数组,所以又写了一个else if
if (arr.get(s[item]) == t[item]) {
arr.set(s[item], arr.get(s[item]))
} else {
console.log(‘----不对–’);
return false
}
} else if (arrW.has(t[item])) {
if (arrW.get(t[item]) == s[item]) {
arrW.set(t[item], arrW.get(s[item]))
} else {
return false
}
} else {
arr.set(s[item], t[item])
arrW.set(t[item], s[item])
}

}
return true 

你可能感兴趣的:(javascript,开发语言,ecmascript)