#!/usr/bin/env python
# coding:utf-8

"""
205. 同构字符串

给定两个字符串 s 和 t，判断它们是否是同构的。

如果 s 中的字符可以被替换得到 t ，那么这两个字符串是同构的。

所有出现的字符都必须用另一个字符替换，同时保留字符的顺序。两个字符不能映射到同一个字符上，但字符可以映射自己本身。

示例 1:

输入: s = "egg", t = "add"
输出: true
示例 2:

输入: s = "foo", t = "bar"
输出: false
示例 3:

输入: s = "paper", t = "title"
输出: true
说明:
你可以假设 s 和 t 具有相同的长度。
"""


# ================================================================================
"""
思路:
可以使用字典 dict 来记住这些字符对是一个很方便的做法。
在这里面我用了两个字典 dict，一个字典 hashmap 用来记 s 的字符到 t 的映射，另一个字典 ismap 用来记录 t 的字符到 s 的映射，
用于判断 t 中的两个字符不能由 s 中同一个字符映射而来。
"""
class Solution(object):
    def isIsomorphic(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        hashmap_st = {k: v for k, v in zip(s, t)}
        hashmap_ts = {k: v for k, v in zip(t, s)}
        s_new = ''.join([hashmap_st[x] for x in s])
        t_new = ''.join([hashmap_ts[x] for x in t])
        return s_new == t and t_new == s
# ================================================================================
# ================================================================================
# ================================================================================

