力扣:205. 同构字符串

前言:剑指offer刷题系列

问题:

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

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

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

示例:

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

思路:

同构字符串的条件是s中的字符和t中的字符是一一对应的关系。即:

相同字符只能映射到同一个字符上:s中的字符到t中的字符的映射是唯一的;
不同字符不能映射到同一个字符上:t中的字符到s中的字符的映射是唯一的;

在我的代码方法中,首先创建了两个空字典s2tt2s,用于存储字符之间的映射关系。

接下来,通过使用zip函数将字符串st中的字符一一对应起来,并使用循环遍历这些对应的字符对。

在每次循环中,通过检查当前字符对(sc, tc)是否满足以下条件来判断它们是否是同构的:

  • 如果sc已经在字典s2t中存在,并且其对应的值s2t[sc]不等于字符tc,则说明st不是同构的,返回False
  • 如果tc已经在字典t2s中存在,并且其对应的值t2s[tc]不等于字符sc,则说明st不是同构的,返回False

如果以上两个条件都不满足,说明当前的字符对是有效的映射关系,将其添加到相应的字典中:

  • s2t[sc] = tc表示将字符sc映射为字符tc
  • t2s[tc] = sc表示将字符tc映射为字符sc

最后,如果循环结束后没有提前返回False,则说明所有的字符对都满足同构的条件,返回True

基于上述思考,代码如下:

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        s2t = {}
        t2s = {}
        for sc, tc in zip(s, t):
            if (sc in s2t and s2t[sc] != tc) or (tc in t2s and t2s[tc] != sc):
                return False
            s2t[sc] = tc
            t2s[tc] = sc
        return True

执行结果如下图:

image-20230920215006471.png

学到的知识点:

什么是同构?同构是数学中的一个概念,它指的是两个结构在某种意义下具有相同的属性和操作。在数学中研究同构的主要目的是为了把数学理论应用于不同的领域。如果两个结构是同构的,那么其上的对象会有相似的属性和操作,对某个结构成立的命题在另一个结构上也成立。

相关推荐

  1. 205.字符串

    2024-03-25 19:04:02       43 阅读
  2. 205. 字符串(Python3)

    2024-03-25 19:04:02       80 阅读
  3. 205题“字符串

    2024-03-25 19:04:02       30 阅读
  4. LeetCode 205. 字符串

    2024-03-25 19:04:02       24 阅读
  5. 经典150题第四十题:字符串

    2024-03-25 19:04:02       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 19:04:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 19:04:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 19:04:02       87 阅读
  4. Python语言-面向对象

    2024-03-25 19:04:02       96 阅读

热门阅读

  1. 爬取MalwareBazaar实现恶意样本数据自由

    2024-03-25 19:04:02       48 阅读
  2. C++多态

    C++多态

    2024-03-25 19:04:02      41 阅读
  3. Python从入门到精通秘籍十九

    2024-03-25 19:04:02       51 阅读
  4. 【软考】蠕虫病毒

    2024-03-25 19:04:02       49 阅读
  5. 用Python做一个植物大战僵尸

    2024-03-25 19:04:02       51 阅读
  6. 工作中常用的git命令

    2024-03-25 19:04:02       34 阅读
  7. 在树莓派4B上安装Ubuntu Server 20

    2024-03-25 19:04:02       44 阅读
  8. 动态规划——零钱兑换

    2024-03-25 19:04:02       38 阅读
  9. 第十五节 JDBC Statement对象执行批量处理实例

    2024-03-25 19:04:02       42 阅读