LeetCode 205. Isomorphic Strings

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        dic1 = dict()
        dic2 = dict()

        for i in range(len(s)):
            if s[i] not in dic1:
                dic1[s[i]] = t[i]
            elif dic1[s[i]] != t[i]:
                return False

        for i in range(len(t)):
            if t[i] not in dic2:
                dic2[t[i]] = s[i]
            elif dic2[t[i]] != s[i]:
                return False
        return True

困るのは
1. 同じ文字を2つ以上の文字に割り当てちゃうこと
2. 2つ以上の文字を同じ文字に割り当てちゃうこと

辞書型を使えば、2.は解決できる。

文字列aから見た文字列bが1の関係になっているならば、
文字列bから見た文字列aは2の関係になっている。

これを利用して、a→bとb→aの辞書をそれぞれ作る。
この中で上記の1,2の問題が発生しなければok


シンプルな解法を見つけたので追記

class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        for i in range(len(s)):
            if s.find(s[i]) != t.find(t[i]):
                return False
        return True

2つの文字列の要素が1対1の対応関係になっているかを調べるのに、
その要素が最初に現れる位置が等しいかで調べるのは有効