205. Isomorphic Strings

하나·2023년 4월 8일
0

코딩테스트

목록 보기
15/16

내 풀이

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() 활용 잘 하자!
  • 접근 방식과 구현 방식 계획을 잘 세우고 시작하자

0개의 댓글