Algorithm/LeetCode
[LeetCode] Longest Substring Without Repeating Characters - (Kotlin)
dvid
2023. 3. 1. 00:43
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