3. Longest Substring Without Repeating Characters

Posted on Oct 11, 2024

Solution

建立一個 Set 來存目前的 Sliding Window 有哪些字元,i, 和 j, 分別是 Sliding Window 的兩端。

每次在 Set 裡面多加入一個字元 s[j], 的時候,就一直把 s[i], 從 Set 中並把 i, 往前推一格。結束後再把 s[j], 加入,並計算現在的 substring 長度是不是最長的。

Implementation

class Solution {
    fun lengthOfLongestSubstring(s: String): Int {
        val charSet = mutableSetOf<Char>()
        var maxLength = 0
        var i = 0
        var j = 0

        while (j < s.length) {
            while (i < j && s[j] in charSet) charSet.remove(s[i++])
            charSet.add(s[j++])
            maxLength = max(maxLength, j - i)
        }

        return maxLength
    }
}