美文网首页
同构字符串

同构字符串

作者: 422ccfa02512 | 来源:发表于2020-12-07 23:48 被阅读0次

题目

难度级别:简单

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

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

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

示例 1:

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

示例 2:

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

示例 3:

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

说明:

你可以假设 s 和 t 具有相同的长度。

解题思路

法一

通过固定遍历字符串末项,且设置一个指针,倒序遍历,若发现s与t字符串同时与prev项相等,则重新拼接字符串,去掉prev项。若其中一个与prev相等则返回false。遍历完之后删除末项。

const isIsomorphic = function(s, t) {
    while(s.length) {
        let prev = s.length - 2

        while(prev >= 0) {
            if (s[s.length - 1] === s[prev] && t[t.length - 1] === t[prev]){
                s = s.slice(0, prev) + s.slice(prev + 1)
                t = t.slice(0, prev) + t.slice(prev + 1)
            }else if (s[s.length - 1] === s[prev] || t[t.length - 1] === t[prev]) {
                return false
            }
            --prev
        }
        s = s.slice(0, s.length - 1)
        t = t.slice(0, t.length - 1)
    }

    return true
};

哈希表

遍历字符串,2张哈希表分别存储s与t,若值不存在,存储值为索引,若值存在判断是否相等。

const isIsomorphic = function(s, t) {
    const hashMapS = new Map()
    const hashMapT = new Map()

    for (let i = 0; i < s.length; i++) {
        const hasS = hashMapS.has(s[i])
        const hasT = hashMapT.has(t[i])

        if (!hasS && !hasT) {
            hashMapS.set(s[i], i)
            hashMapT.set(t[i], i)
        }else if(!hasS || !hasT || hashMapS.get(s[i]) !== hashMapT.get(t[i])) {
             return false
        }
    }

    return true
};

字符串indexOf

通过字符串indexOf方法查找与当前项值相等的第一项。若s与t返回的索引不相等,则返回false。

const 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
};

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/isomorphic-strings

相关文章

  • 同构字符串

    题目 难度级别:简单 给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,...

  • 同构字符串

    给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构...

  • 字符串的最小表示法

    字符串的循环同构:设S=bcad,且S’是S的循环同构的串。S’可以是bcad或者cadb,adbc,dbca。而...

  • 2019-11-15 同构字符串

    给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构...

  • 638. 字符同构

    给定两个字符串 s 和 t ,确定它们是否是同构的。两个字符串是同构的如果 s 中的字符可以被替换得到 t。所有出...

  • T205、同构的字符串

    给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的...

  • 49同构字符串

    给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的...

  • 8.23刷题题解代码

    202 快乐数 205 同构字符串 思路总结:第1种,把字符串转换成了数组,通过比较数组是否相等来判断字符串是否同...

  • 数据结构与算法-同构字符串205(java)

    tags: 字符串categories: 数据结构与算法 题目:给定两个字符串 s 和 t,判断它们是否是同构的。...

  • 205. 同构字符串

    内容 给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,那么这两个字符串...

网友评论

      本文标题:同构字符串

      本文链接:https://www.haomeiwen.com/subject/auyxgktx.html