判断是否为同构字符串
要想解答这个算法,得明白一个概念,什么是同构字符串,来看一下定义:
也就是说,s可以转化为t,对应的t也可以转化为s。
解决思路:
我们进行一次的遍历,然后定义了两个dict,来记录s->t,t->s的映射,然后在后面校验一下,这两个dict的value 是否是相同的,来上代码。
class Solution: def isIsomorphic(self, s: str, t: str): dict_s = {} dict_t = {} for s_i, t_i in zip(s, t): if s_i not in dict_s: dict_s[s_i] = ord(s_i) - ord(t_i) if t_i not in dict_t: dict_t[t_i] = ord(s_i) - ord(t_i) # 如果value不相同 就返回False 在py37后 dict是有序的 for s_i, t_i in zip(s, t): if dict_s[s_i] != dict_t[t_i]: return False return True
为什么定义了两个dict?用来避免不同的s对应相同的t,所以用两个dict来进行校验。