认真地分类讨论,评判复杂度,再决定是否要写代码执行。整套流程干净利落,不存在主观臆想,也不会有对事实结果计算的巨大偏差。

1. 题目

【LeetCode】205. 同构字符串_字符串

2. 分析

这里提供一版可以解题的思路。
定义两个词典,这两个词典分别记录s字符串中各位字符映射到字符串t对应位置的字符,如果是同构字符串,那么这两个词典之间都是会一一对应,不会存在重复映射,也不会存在漏映射的情况。

3. 代码

3.1 错误代码

下面这版代码是错误的代码。 错误的原因在于:字符个数一致不代表替换后能一致。 举个简单例子:
aababbbaaa 这两个字符串的ab的个数都能对应的上,但它们并不是一个同构字符串。原因在于它们有一个相同位(第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] = 1
            else:
                char2cnt_s[c] += 1
        
        for c in t:
            if c not in char2cnt_t:
                char2cnt_t[c] = 1
            else:
                char2cnt_t[c] += 1

        cnt2num_s = defaultdict(int)
        cnt2num_t = defaultdict(int)
        for item in char2cnt_s.items():
            key, val = item
            cnt2num_s[val] += 1
        for item in char2cnt_t.items():
            key, val = item
            cnt2num_t[val] += 1
        
        return  cnt2num_s == cnt2num_t
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

3.2 正确代码