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 — длина строки.