205. 同构字符串【哈希表】

205. 同构字符串

205. 同构字符串

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

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

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 1 <= s.length <= 5 * 10^4
  • t.length == s.length
  • s 和 t 由任意有效的 ASCII 字符组成

解题思路

思路与290题一样,用map看看s中的每个字符与t中的每个字符是否有映射关系,但要注意不同字符不能映射到同一个字符上,所以要双向映射。比如a对应c后,b就不能对应c了,也就是c对应a后,就不能再对应b,考虑到这种情况,所以需要双向check,如下实例应返回false

“abba”
“cccc”

Go代码

func isIsomorphic(s string, t string) bool {
    // 思路与290题一样,用map看看s中的每个字符与t中的每个字符是否有映射关系
    //长度都不相等,肯定不符合题目要求的双向对应规律
    if len(s) != len(t) {
        return false
    }
    /* a对应c后,b就不能对应c了,考虑到这种情况,所以需要双向check,如下实例应返回false
    "abba"
    "cccc" */
    return checkIsomorphic(s,t) && checkIsomorphic(t,s)
}

func checkIsomorphic(a,b string) bool {
    helpMap := make(map[byte]byte)
    for i := 0; i < len(a);i++ {
        if val,ok := helpMap[a[i]];ok {
            if val != b[i] {
                return false
            }
        } else {
            helpMap[a[i]] = b[i]
        }
    }
    return true
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值