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の対応関係になっているかを調べるのに、
その要素が最初に現れる位置が等しいかで調べるのは有効