【LeetCode】205. 同构字符串

134 阅读2分钟

image.png

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

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

二、思路分析:

我们拿到本题时,想到了之前也刷到过类似的290.单词规律。我们巩固一下重温解答该题的思路。

如何判断两个字符串,是否是相同的匹配模式?

  • 脑袋会立马地想到映射,使用哈希表来建立对应关系。
  • 在python中,建立映射关系的就是数据类型就是字典

因此,解答该题前,我们要使用临时的字典来帮我们创建key-value关系。

首先,该题存在两种情况需要判断:

  1. 当字符串s和字符串t长度不相等时,不管什么模式都不满足,直接返回False

  2. 当字符串s和字符串t长度相等时,则要进行三种情况判断:

    • key值相同,value值不相同。如"aaaaa","abcde"
    • key值不同,value值相同。如"abcde","aaaaa"
    • key值与value值一一对应

因此,我们需要定义两个字典来分别判断key与value值不对应的情况。

  • s[i]作为key值,t[i]作为value值
  • t[i]作为key值,s[i]作为value值

手动梳理一下,演示思路如下列图所示:

image.png

image.png

image.png

根据上图思路,我们使用python可以快速实现,代码如下:

class Solution(object):
    def isIsomorphic(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """

        if len(s) != len(t):

            return False

        st_dict = {}
        ts_dict ={}

        for i in range(len(s)):

            if s[i] in st_dict.keys() and st_dict[s[i]] != t[i]:

                return False

            if t[i] in ts_dict.keys() and ts_dict[t[i]] != s[i]:

                return False
 
            st_dict[s[i]] = t[i]

            ts_dict[t[i]] = s[i]
            
        
        return True
        

三、总结:

本题考察的哈希表,key-value关系的判断。后续遇到需要映射关系时,可以考虑此方法。

image.png

时间复杂度O(N),空间复杂度O(∣Σ∣),其中Σ 是字符串的字符集

以上是本期内容,欢迎大佬们点赞评论,下次见~~~