문제
205. Isomorphic Strings
풀이
class Solution {
func isIsomorphic(_ s: String, _ t: String) -> Bool {
var hash = [Character:Character]()
var map = Set<Character>()
var s = Array(s), t = Array(t)
for i in s.indices.suffix(from: 0) {
if let r = hash[s[i]] {
if r != t[i] {
return false
}
} else {
if map.contains(t[i]) {
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 {
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
이런식으로 초기화 하는 것도 신선했다.