내 풀이
from collections import defaultdict
# s에 있는 문자를 t 랑 앞에서부터 매핑 했을 때 이미 정의된 매핑이랑 다르면 false
class Solution:
def isIsomorphic(self, s: str, t: str) -> bool:
# 같은 key에 대해 value 가 다른 값으로 업데이트 되는 경우 찾기 위해 defaultdict 사용
str_dict = defaultdict(list)
d_value_list = []
# 맵핑을 위한 dict 만들기
for s_idx, s_string in enumerate(s) :
str_dict[s_string].append(t[s_idx])
for d_key, d_value in str_dict.items():
# badc, baba 같은 경우 처리 위해 value 값을 list에 저장
d_value_list.append(list(set(d_value))[0])
# value 가 다른 값으로 업데이트 되는 경우, dict value의 list 의 길이가 1보다 클 것
if len(d_value) > 1 :
if len(set(d_value)) >1 :
return False
else :
continue
# badc, baba 같은 경우 처리
if len(set(d_value_list)) != len(d_value_list):
return False
return True
# Runtime
# 43 ms
# Beats
# 57.56%
# Memory
# 14.5 MB
# Beats
3 21.75%
모범 코드 1
class Solution:
def isIsomorphic(self, s: str, t: str) -> bool:
return (len(set(s)) == len(set(t)) == len(set(zip(s,t))))
모범 코드 2
# Time Complexity : O(n)
class Solution(object):
def isIsomorphic(self, s, t):
map1 = []
map2 = []
for idx in s:
map1.append(s.index(idx))
for idx in t:
map2.append(t.index(idx))
if map1 == map2:
return True
return False
- zip(), set() 활용 잘 하자!
- 접근 방식과 구현 방식 계획을 잘 세우고 시작하자