https://leetcode.com/problems/longest-substring-without-repeating-characters/description
처음 방법은 Map을 이용해서 인덱스를 관리하면서 해결했다.
중복키가 나오면 맵을 지우고 인덱스를 처음 중복된 곳 바로 앞으로 가도록 했다.
var max = 0
var i = 0
val map = hashMapOf<Char, Int>()
while (i < s.length) {
if (map.containsKey(s[i])) {
i = map[s[i]]!! + 1
max = max(map.size, max)
map.clear()
}
map[s[i]] = i++
}
max = max(map.size, max)
return max
정답은 맞았지만, Solutions를 보니 Set을 이용하여 투 포인터 알고리즘을 사용하여 푼 풀이도 있었다.
기존 알고리즘보다 더 빨랐다.
val set = hashSetOf<Char>()
var max = 0
var l = 0
for (r in s.indices) {
if (set.contains(s[r])) {
while (s[l] != s[r]) {
set.remove(s[l])
l++
}
set.remove(s[l++])
set.add(s[r])
} else {
set.add(s[r])
max = max(max, r - l + 1)
}
}
return max
'Algorithm > LeetCode' 카테고리의 다른 글
[LeetCode] Majority Element - (Kotlin) (0) | 2023.01.20 |
---|---|
[LeetCode] Valid Palindrome - (Kotlin) (0) | 2023.01.16 |
[LeetCode] Convert Sorted Array to Binary Search Tree (Kotlin) (0) | 2023.01.15 |
[LeetCode] Symmetric Tree (Kotlin) (0) | 2023.01.14 |
[LeetCode] Merge Sorted Array (Kotlin) (0) | 2023.01.14 |
댓글