[LeetCode] 205.同构字符串(Easy)C语言题解

题目

  • 给定两个字符串 s 和 t,判断它们是否是同构的。
  • 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
  • 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

示例

①示例1
  • 输入: s = “egg”, t = “add”
  • 输出: true
②示例2
  • 输入: s = “foo”, t = “bar”
  • 输出: false
③示例3
  • 输入: s = “paper”, t = “title”
  • 输出: true

说明

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

①数据范围(自测)
  • 0 <= s[i] < 128
  • 0 <= t[i] < 128
②相关话题
  • 哈希表
③相似题目
④题目地址

解题方法

①哈希表
  • 数据的范围是 0 ~ 128,可用数组模拟的哈希表求解,速度最快(用空间换时间)。
  • 注意:这里不仅要验证 s 到 t 的映射(题意),还要验证 t 到 s 的映射,不要忽略 t 中的两个不同字符不能由 s 中同一个字符映射而来。
  • 需要创建两个哈希表,hash1 用于记录 s 的字符到 t 的映射,hash2 用于记录 t 的字符到 s 的映射。
  • 时间复杂度:O(N)。
  • 空间复杂度:O(N)。

代码详解

  • 哈希表
bool isIsomorphic(char* s, char* t) {
    int hash1[128] = {0}, hash2[128] = {0}, len = strlen(s);
    
    for (int i = 0; i < len; i++) {
        /*
         以下两种情况返回false:
            1.t中的相同字符映射了b中的不同字符。
            2.b中的相同字符映射了t中的不同字符。
         */
        if ((hash1[s[i]] == 0 && hash2[t[i]+1] != 0) || (hash1[s[i]] > 0 && hash1[s[i]] != t[i]+1))
            return false;
        else {
            hash1[s[i]] = t[i]+1;
            hash2[t[i]+1] = 1;
        }
    }
                 
    return true;
}

附录

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值