반응형
○
Hash Table | Easy
LeetCode 2399. Check Distances Between Same Letters
소문자 알파벳의 아스키 값을 사용하는 것이 관건인 문제. 문제 이해하고 나면 어렵진 않다.
근데 문제 설명을 너무 어렵게 해놓음.. ㅡㅡ 내가 이해력이 딸리는건가? ㅎ
0-indexed string 은 무슨말이지? i번째 문자 저게 대체 뭔말인고 ? ㅋㅋㅋㅋ
그런거 다 무시하고 그냥 같은 문자 두개씩 주는데, 같은 문자 두개의 인덱스 차이를 구하면 되는 문제이다.
그 차이가 distance 배열의 알파벳 문자 인덱스와 일치하는지 확인해주면 됨.
1. 문자가 딕셔너리에 없으면 해당 문자의 인덱스를 값으로 추가해주고,
이미 있으면 현재 인덱스와 기존 인덱스의 차를 구해서 같은 문자 두 개 사이에 있는 문자의 길이를 구해준다.
2. 소문자 알파벳의 아스키 값으로 distance 배열과 비교
알파벳의 인덱스를 표현하기 위해 ascii 값을 가져와 사용할 수 있다.
소문자로만 이루어져있기 때문에 해당 알파벳의 ascii 값에서 가장 첫 알파벳 a 의 ascii 값 (97) 을 빼서 distance의 인덱스로 만들어준다.
알파벳 사이 문자 길이가 distance 인덱스 숫자와 같다면 true, 하나라도 다르면 false 를 반환한다.
let solution = Solution()
print(solution.checkDistances("abaccb", [1,3,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])) //true
class Solution {
func checkDistances(_ s: String, _ distance: [Int]) -> Bool {
var dict: [Character:Int] = [:]
let array = s.map { $0 }
for i in 0..<array.count {
if let first = dict[array[i]] {
dict[array[i]] = i - first - 1
} else {
dict[array[i]] = i
}
}
for (key, value) in dict {
let index = key.asciiValue! - Character("a").asciiValue!
if value != distance[Int(index)] {
return false
}
}
return true
}
}
728x90
반응형
'Algorithm > LeetCode' 카테고리의 다른 글
[Swift 알고리즘] LeetCode 496. Next Greater Element I (0) | 2023.04.30 |
---|---|
[Swift 알고리즘] LeetCode 2506. Count Pairs Of Similar Strings (0) | 2023.04.25 |
[Swift 알고리즘] LeetCode 53. Maximum Subarray (0) | 2023.04.03 |
[Swift 알고리즘] LeetCode 70. Climbing Stairs (0) | 2023.04.03 |
[Swift 알고리즘] LeetCode 119. Pascal's Triangle II (0) | 2023.04.01 |