力扣刷题(第四十八天)

灵感来源 

- 保持更新,努力学习

- python脚本学习

同构字符串

解题思路

  1. 双向映射检查:需要确保两个字符串中的字符映射是双向唯一的。例如,若 s 中的字符 a 映射到 t 中的字符 b,那么 t 中的 b 也必须映射回 s 中的 a
  2. 哈希表实现:使用两个哈希表分别记录从 s 到 t 和从 t 到 s 的映射关系。
  3. 遍历检查:遍历两个字符串的每个字符,检查映射关系是否一致。若发现不一致的映射,则返回 False;否则返回 True
    class Solution:
        def isIsomorphic(self, s: str, t: str) -> bool:
            if len(s) != len(t):
                return False
            
            s_to_t = {}
            t_to_s = {}
            
            for c1, c2 in zip(s, t):
                # 检查正向映射
                if c1 in s_to_t:
                    if s_to_t[c1] != c2:
                        return False
                else:
                    s_to_t[c1] = c2
                
                # 检查反向映射
                if c2 in t_to_s:
                    if t_to_s[c2] != c1:
                        return False
                else:
                    t_to_s[c2] = c1
            
            return True

逐行解释

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        # 首先检查两个字符串的长度是否相同
        # 如果长度不同,它们不可能是同构的
        if len(s) != len(t):
            return False
        
        # 使用两个哈希表分别记录s到t和t到s的字符映射关系
        # 确保两个方向的映射都是唯一的
        s_to_t = {}  # 记录s中字符到t中字符的映射
        t_to_s = {}  # 记录t中字符到s中字符的映射
        
        # 同时遍历两个字符串的每个字符
        for c1, c2 in zip(s, t):
            # 检查正向映射:s中的字符是否已经映射到其他字符
            if c1 in s_to_t:
                # 如果已经映射,检查当前映射是否与之前记录的一致
                if s_to_t[c1] != c2:
                    return False  # 发现不一致,不是同构字符串
            else:
                # 如果未映射,记录新的映射关系
                s_to_t[c1] = c2
            
            # 检查反向映射:t中的字符是否已经映射到其他字符
            if c2 in t_to_s:
                # 如果已经映射,检查当前映射是否与之前记录的一致
                if t_to_s[c2] != c1:
                    return False  # 发现不一致,不是同构字符串
            else:
                # 如果未映射,记录新的映射关系
                t_to_s[c2] = c1
        
        # 所有字符对都满足双向唯一映射,字符串是同构的
        return True

你可能感兴趣的:(leetcode,算法,职场和发展)