Back to questions
МВидео
Middle+
4
// Дана строка s. Нужно найти длину самой длинной подстроки без повторяющихся символов. // Примеры: // s = "abcabcbb", ответ: 3 ("abc") // s = "cccccccc", ответ: 1 ("c") // s = "pwwkew", ответ: 3 ("wke") // s = "", ответ: 1 ("") // Строка s состоит из английских букв, цифр, символов и пробелов func lengthOfLongestSubstring(s string) int { return 0 }
Companies where asked
Answer from AI
sobes.tech AI
Для решения задачи поиска длины самой длинной подстроки без повторяющихся символов можно использовать алгоритм "скользящего окна" (sliding window). Идея в том, чтобы поддерживать два указателя, которые определяют текущую подстроку без повторов, и обновлять максимальную длину по мере продвижения.
Пример реализации на Go:
func lengthOfLongestSubstring(s string) int {
charIndex := make(map[rune]int) // хранит последний индекс символа
maxLen := 0
start := 0
for i, ch := range s {
if lastPos, found := charIndex[ch]; found && lastPos >= start {
start = lastPos + 1
}
charIndex[ch] = i
if i - start + 1 > maxLen {
maxLen = i - start + 1
}
}
return maxLen
}
Объяснение:
start— начало текущего окна без повторяющихся символов.charIndexхранит последний индекс каждого символа.- Если встречается повтор символа внутри текущего окна, сдвигаем
startза последний индекс этого символа. - Обновляем максимальную длину при каждом шаге.
Так алгоритм работает за O(n), где n — длина строки.