본문 바로가기
Algorithm/LeetCode

[LeetCode] Longest Substring Without Repeating Characters - (Kotlin)

by dvid 2023. 3. 1.

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

댓글