该题解使用哈希表来解决同构字符串问题。具体思路如下:
1. 使用两个哈希表 s2t 和 t2s 分别存储字符串 s 到 t 的映射以及 t 到 s 的映射。
2. 遍历字符串 s 和 t,对于每个位置的字符 a 和 b:
- 如果 a 已经存在于 s2t 中,且 s2t[a] 不等于 b,说明存在一对多的映射关系,返回 False。
- 如果 b 已经存在于 t2s 中,且 t2s[b] 不等于 a,说明存在多对一的映射关系,返回 False。
- 如果以上两种情况都不满足,将 a 映射到 b 存入 s2t,将 b 映射到 a 存入 t2s。
3. 遍历完成后,如果没有出现一对多或多对一的映射关系,则说明 s 和 t 是同构的,返回 True。
时间复杂度: O(n)
空间复杂度: O(n)
```python
class Solution:
def isIsomorphic(self, s: str, t: str) -> bool:
s2t, t2s = {}, {} # 创建两个哈希表,分别存储 s 到 t 的映射和 t 到 s 的映射
for a, b in zip(s, t): # 同时遍历字符串 s 和 t
# 对于已有映射 a -> s2t[a],若和当前字符映射 a -> b 不匹配,
# 说明有一对多的映射关系,则返回 False;
# 对于映射 b -> a 也同理
if a in s2t and s2t[a] != b or \
b in t2s and t2s[b] != a:
return False
s2t[a], t2s[b] = b, a # 将 a 映射到 b 存入 s2t,将 b 映射到 a 存入 t2s
return True # 遍历完成后,如果没有出现一对多或多对一的映射关系,则返回 True
```