문제 링크 : https://leetcode.com/problems/isomorphic-strings/
isomorphic 한지 판단하는 문제.
뭐 대충 각 글자끼리 매칭..?이 되는지 묻는 문제인데
첨에는 set()을 이용하여 중복을 제거하고 s와 t의 문자의 개수가 같지 않으면 매칭이 되지 않는다는 뜻이니 False를 반환하고 같으면 True를 반환하도록 풀었는데 틀렸따
class Solution:
def isIsomorphic(self, s: str, t: str) -> bool:
ss = set(s)
tt = set(t)
if len(ss) == len(tt):
return True
return False
실패한 테.케:
"bbbaaaba"
"aaabbbba"
(근데 대충 a랑 b랑 연결되면 되는거 아닌가..? 생각이 들긴함
아마도 같은 인덱스끼리..? 도 매핑이 되야하는듯..?
사실 아직까지도 아이소모픽인지 뭔지 완전히 이해하지는 못함
근데 이런게 대체 실제 업무에 얼마나 대단히 도움이 되는지?ㅋ 궁금하네요ㅋ)
2차 시도
HashMap을 써서 s의 글자는 key에 t의 글자는 value에 넣어 같은 s의 같은 글자에 t의 같은 글자가 오는지 확인하는 방식으로 풀었다.
class Solution:
def isIsomorphic(self, s: str, t: str) -> bool:
hashS, hashT={},{}
for s1,t1 in zip(s, t):
if(( s1 in hashS and hashS[s1] != t1) or (t1 in hashT and hashT[t1] != s1)):
return False
hashS[s1] = t1
hashT[t1] = s1
return True
+)추가로 discussion에서 내가 초기에 시도했을 때와 비슷한 로직의 해결법을 찾았다.
class Solution:
def isIsomorphic(self, s: str, t: str) -> bool:
zipped_set = set(zip(s, t))
return len(zipped_set) == len(set(s)) == len(set(t))
만약
s = "egg"
t = "add"
의 경우
zipped_set 의 값은 {('e', 'a'), ('g', 'd')} 를 반환한다.
그리고 len(zipped_set) len(set(s)) len(set(t)) 모두 2를 반환하므로 true를 반환한다.
그러나
s = "egk"
t = "add"
의 경우
zipped_set 은 {('e', 'a'), ('g', 'd'), ('k', 'd')} 를 반환한다
그래서 len(zipped_set) len(set(t))는 3을 len(set(s)) 는 2이므로 False를 반환한다