[Python]LeetCode 205. 同构字符串(解法二):一行代码搞定

447 阅读1分钟
给定两个字符串 s 和 t,判断它们是否是同构的。

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

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

示例 1:

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

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

输入: s = "paper", t = "title"
输出: true

说明:
你可以假设 s 和 t 具有相同的长度
  • 思路2
# 1. 构成二个list(二元组),前后互换所以是2个。
# 2. 先成为集合(排除完全一样的二元组(这些是合法)
# 3. 再转为字典如果长度变短就是非法的,否则就是合法(单向)的
# 4. 反过来再做一遍,双向合法才是真的合法
  • 通过的代码如下
class Solution:
  def isIsomorphic(self, s: str, t: str) -> bool:
      list_st = list(zip(s,t))
      list_ts = list(zip(t,s))
      set_st = set(list_st)
      set_ts = set(list_ts)
      if len(dict(set_st))==len(set_st):
          if len(dict(set_ts))==len(set_ts):
              return True
          else:
              return False
      else:
          return False
  • 通过的结果一般,比上一次差,感觉不合理。

  • 当然上面的代码很多是为了给大家看中间过程写的,冗繁了。最终可以改写成一行!!
class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        return len(dict(set(zip(s,t))))==len(set(zip(s,t))) and len(dict(set(zip(t,s))))==len(set(zip(t,s)))
  • 但是说到最后,效率还是不行,写代码最终还是要回归效率,光有功能不行,那就要去看看人家的题解了。