Поиск подстроки с уникальными символами

Описание задачи: Дана строка s. Необходимо найти самую длинную подстроку, которая содержит только уникальные символы. Вернуть длину этой подстроки.

Входные данные:

  • s - строка, состоящая из строчных латинских букв (например, "abcabcbb").

Выходные данные:

  • Целое число, длина самой длинной подстроки с уникальными символами.
Вход: "abcabcbb"
Выход: 3

Вход: "bbbbb"
Выход: 1

Вход: "pwwkew"
Выход: 3

Условия:

  • Длина строки может быть от 1 до 10^5 символов.
  • Алгоритм должен работать за линейное время O(n).

Подсказка: Для решения задачи можно использовать скользящее окно и хэш-таблицу (или множество) для отслеживания уникальных символов.

fun lengthOfLongestSubstring(s: String): Int {
    val n = s.length
    var maxLength = 0
    var left = 0
    val charSet = mutableSetOf<Char>()

    for (right in 0 until n) {
        while (charSet.contains(s[right])) {
            charSet.remove(s[left])
            left++
        }
        charSet.add(s[right])
        maxLength = maxOf(maxLength, right - left + 1)
    }

    return maxLength
}

fun main() {
    println(lengthOfLongestSubstring("abcabcbb")) // Output: 3
    println(lengthOfLongestSubstring("bbbbb")) // Output: 1
    println(lengthOfLongestSubstring("pwwkew")) // Output: 3
}