leetcode 205. isomorphic-strings 同构字符串 python3

时间:2020-8-30

题目地址:https://leetcode-cn.com/problems/isomorphic-strings/

题目难度:Easy

题目描述:

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

如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。

所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

示例 1:

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

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

输入: s = "paper", t = "title"
输出: true
说明:
你可以假设 s 和 t 具有相同的长度。


思路1:暴力

第一次提交忽略了顺序,有一个用例没有通过,"abba" "abab"

代码段1:通过

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        length, dict_s, dict_t = len(s), {}, {}
        for i in range(length):
            if s[i] in dict_s:
                dict_s[s[i]] += 1
            else:
                dict_s[s[i]] = 1
                
            if t[i] in dict_t:
                dict_t[t[i]] += 1
            else:
                dict_t[t[i]] = 1
            if list(dict_s.values()) != list(dict_t.values()):
                return False
        return True

总结:

  1. 自从心理咨询考试结束之后就一直在简单题里刷自信,哈哈哈哈哈

思路2:大佬们的优化写法,简直厉害了

  • str 类型数据拥有内置函数 index,输入一个子字符串,可以返回子字符串在 str 中第一次出现的索引,若不存在则报错
  • map(函数,可迭代对象) 将会对(参数2:可迭代对象)中的每个元素运用(参数1:函数)并将结果按顺序储存在一个迭代器中,返回这个迭代器
  • 使用 [*……] 可对对象解包,本题中 [*map……] 等效于 list(map……)

代码段2:通过

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        return [*map(s.index, s)] == [*map(t.index, t)]

总结:

  1. 得把数据结构掌握好了,才能达到这程度吧

思路3:大佬们的优化写法,简直厉害了

这个很厉害,就用了一个字典,其实代码写完自己可以检查,能优化的其实很多

代码段3:通过

class Solution(object):
    def isIsomorphic(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        if not s:
            return True
        dic={}
        for i in range(len(s)):
            if s[i] not in dic:
                if t[i] in dic.values():
                    return False
                else:
                    dic[s[i]]=t[i]
            else:
                if dic[s[i]]!=t[i]:
                    return False
        return True

总结:

  1. 持续学习,不断输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值