认真地分类讨论,评判复杂度,再决定是否要写代码执行。整套流程干净利落,不存在主观臆想,也不会有对事实结果计算的巨大偏差。
1. 题目
2. 分析
这里提供一版可以解题的思路。
定义两个词典,这两个词典分别记录s字符串中各位字符映射到字符串t对应位置的字符,如果是同构字符串,那么这两个词典之间都是会一一对应,不会存在重复映射,也不会存在漏映射的情况。
3. 代码
3.1 错误代码
下面这版代码是错误的代码。 错误的原因在于:**字符个数一致不代表替换后能一致。**举个简单例子:
aabab
bbaaa
这两个字符串的a
和 b
的个数都能对应的上,但它们并不是一个同构字符串。原因在于它们有一个相同位(第4位)
class Solution:def isIsomorphic(self, s: str, t: str) -> bool:char2cnt_s = dict()char2cnt_t = dict()for c in s:if c not in char2cnt_s:char2cnt_s[c] = 1else:char2cnt_s[c] += 1for c in t:if c not in char2cnt_t:char2cnt_t[c] = 1else:char2cnt_t[c] += 1cnt2num_s = defaultdict(int)cnt2num_t = defaultdict(int)for item in char2cnt_s.items():key, val = itemcnt2num_s[val] += 1for item in char2cnt_t.items():key, val = itemcnt2num_t[val] += 1return cnt2num_s == cnt2num_t