日新刷题 - 205. 同构字符串

56 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情

一、题目描述:

205. 同构字符串 - 力扣(LeetCode) (leetcode-cn.com)

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

如果 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 字符组成

二、思路分析:

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

我第一眼看到题目的时候觉得好难,怎么可能包含所有的映射关系啊,看了答案中的index也不理解,一个index咋能包含所有的映射关系呢,后来反应过来是自己理解的问题。

其实就和高数里面的函数f(x)是一样的,我们不需要关心f(x)的表达式是什么,只需要知道有一一的对应关系。 以示例举例子:

s里面包含e,g,g;t里面包含a,d,d;
e对应a,g对应d,g对应g;
所以返回是True\

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

s里面包含f,o,o;t里面包含b,a,r;
f对应b,o对应a,“foo”中的第三个o不能对应r(因为在第二位已经对应a了,不能一对多),所以是错误

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

大家可以按此分析一下示例

所以这样就可以使用index了,代码还是比较简单的如下:
还有其他大佬们的别的代码可以供大家参考~

三、AC 代码:

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        for i in range(len(s)):
            if s.index(s[i]) != t.index(t[i]):
                return False
        return True