
import Foundation
func solution(_ s:String) -> [Int] {
var lastIndex: [Character : Int] = [:]
var result = Array(repeating: -1, count: s.count)
for (i, c) in s.enumerated() {
result[i] = lastIndex[c] == nil ? -1 : i - lastIndex[c]!
lastIndex[c] = i
}
return result
}
딕셔너리로 각 문자의 마지막 인덱스를 저장
result = Array(repeating: -1, count: s.count):
문자열의 개수만큼 -1 값으로 배열 생성
enumerated():
문자열의 (인덱스, 문자) 튜플을 반환. (i, c) 튜플로 for문에 활용
lastIndex[c]가 nil이면 해당 문자는 처음 나온 문자이므로 -1 저장, 아니라면 현재 인덱스 - 가장 최근에 나왔던 인덱스
💡 딕셔너리의 반환값이
nil인 경우?
Swift 딕셔너리에서 섭스크립트([key])로 접근하면 해당 키가 존재하지 않을 수 있기에 항상 Optional Type을 반환한다.var dict = ["apple": 5, "banana": 3] let apple = dict["apple"] // Optional(5)
처음에는 이차원 배열로 해결하려고 했는데, 동일한 문자에 대해 값을 수정해야 해서 딕셔너리가 더 직관적이라고 판단했다.
다른 사람의 풀이에 비교해봐도 내 코드가 효율적이라고 느껴서 오늘은 다른 사람의 풀이 스킵! 👍