[LeetCode] [Swift] 205. Isomorphic Strings

doyeonjeong_·2022년 7월 28일
0

LeetCode

목록 보기
2/5
post-thumbnail

문제

205. Isomorphic Strings

풀이

// 205. Isomorphic Strings
class Solution {
        func isIsomorphic(_ s: String, _ t: String) -> Bool {
            var hash = [Character:Character]() // 매칭
            var map = Set<Character>() // 이미 매칭된 t의 문자
            var s = Array(s), t = Array(t)
            for i in s.indices.suffix(from: 0) {
                if let r = hash[s[i]] { // 해시에 key가 있다면
                    if r != t[i] { // t와 같지 않을 때 false
                        return false
                    }
                } else { // 해시에 key가 존재할 때
                    if map.contains(t[i]) { // t가 이미 매칭 되었다면 false
                       return false
                    }
                    hash[s[i]] = t[i]
                    map.insert(t[i])
                }
            }
            return true
        }
    }

🤔 FEEDBACK

  • 다른 코드 해석이나 알고리즘 까지는 생각할 수 있는데 구현이 참 어렵다.
  • 처음 생각했던 방법은 return이 너무 많고 계속 오류가 났는데 못 고쳤다. 🥲

다른 풀이

class Solution {
    func isIsomorphic(_ s: String, _ t: String) -> Bool {
        var sdic = [Character:String.Index](), tdic = sdic
        for i in s.indices { // i is Index
						
            guard sdic[s[i]] == tdic[t[i]] else { return false }
            sdic[s[i]] = i
            tdic[t[i]] = i
        }
        return true
    }
}
  • 코드 작성자 velog : https://velog.io/@eugenie8
  • 해석하는데 시간이 정말 오래걸렸지만 간결하고 빠른 코드다.
  • indices 를 사용하면 Index를 _rawBits 고유번호로 반환한다.
  • 아 그리고 var tdic = sdic 이런식으로 초기화 하는 것도 신선했다.
profile
블로그 이사중 🚚 byukbyak.tistory.com

0개의 댓글