Sobes.tech
Middle+

// Δεδομένη η συμβολοσειρά s. Πρέπει να βρείτε το μήκος της μεγαλύτερης υπο-συμβολοσειράς χωρίς επαναλαμβανόμενους χαρακτήρες. // Παραδείγματα: // s = "abcabcbb", απάντηση: 3 ("abc") // s = "cccccccc", απάντηση: 1 ("c") // s = "pwwkew", απάντηση: 3 ("wke") // s = "", απάντηση: 0 // Η συμβολοσειρά s αποτελείται από αγγλικά γράμματα, ψηφία, σύμβολα και κενά func lengthOfLongestSubstring(s string) int { return 0 }

sobes.tech AI

Απάντηση από AI

Для поиска длины самой длинной подстроки без повторяющихся символов можно использовать алгоритм "скользящего окна" с двумя указателями и хеш-таблицей для отслеживания последних позиций символов.

Пример решения на Go:

def lengthOfLongestSubstring(s string) int {
    lastIndex := make(map[rune]int)
    maxLen := 0
    start := 0

    for i, ch := range s {
        if pos, found := lastIndex[ch]; found && pos >= start {
            start = pos + 1
        }
        lastIndex[ch] = i
        if currentLen := i - start + 1; currentLen > maxLen {
            maxLen = currentLen
        }
    }

    return maxLen
}

Объяснение:

  • lastIndex хранит последний индекс каждого символа.
  • start — начало текущего окна без повторов.
  • При встрече повторяющегося символа с индексом >= start сдвигаем start.
  • Обновляем максимальную длину окна.

Так алгоритм работает за O(n), где n — длина строки.