问题描述:
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
示例 1:
输入: s = "egg", t = "add"输出: true
示例 2:
输入: s = "foo", t = "bar"输出: false
示例 3:
输入: s = "paper", t = "title"输出: true
官方1:
1 class Solution(object):2 def isIsomorphic(self, s, t):3 """4 :type s: str5 :type t: str6 :rtype: bool7 """8 return len(set(s)) == len(set(t)) == len(set(zip(s,t)))
>>>a = [1,2,3]>>> b = [4,5,6]>>> c = [4,5,6,7,8]>>> zipped = zip(a,b) # 返回一个对象>>> zipped<zip object at 0x103abc288>>>> list(zipped) # list() 转换为列表[(1, 4), (2, 5), (3, 6)]>>> list(zip(a,c)) # 元素个数与最短的列表一致[(1, 4), (2, 5), (3, 6)]>>> a1, a2 = zip(*zip(a,b)) # 与 zip 相反,*zip 可理解为解压,返回二维矩阵式>>> list(a1)[1, 2, 3]>>> list(a2)[4, 5, 6]>>>
未用过的defaultdict:
1 from collections import defaultdict 2 class Solution(object): 3 def isIsomorphic(self, s, t): 4 """ 5 :type s: str 6 :type t: str 7 :rtype: bool 8 """ 9 alpdict1 = defaultdict(int)10 alpdict2 = defaultdict(int)11 for i in range(len(s)):12 sc = s[i]13 st = t[i]14 if alpdict1[sc] != alpdict2[st]:15 return False16 alpdict1[sc] = i+117 alpdict2[st] = i+118 return True
同时放进dict,其分配的value是相同的。
待看:
1 class Solution(object): 2 def isIsomorphic(self, s, t): 3 """ 4 :type s: str 5 :type t: str 6 :rtype: bool 7 """ 8 if len(s) != len(t): return False 9 n = len(s)10 if n == 0: return True11 12 sa = s[0]13 ta = t[0]14 15 m = {}16 for i in range(1,n):17 if (s[i] == sa and t[i] != ta) or (s[i] != sa and t[i] == ta): return False18 elif s[i] != sa and t[i] != ta: 19 if sa not in m: m[sa] = ta20 elif m[sa] != ta: return False21 sa = s[i]22 ta = t[i]23 if sa in m and m[sa] != ta: return False24 return True
2018-09-18 20:48:59