Пример решения задачи #3 на Python LeetCode — Самая длинная подстрока без повторяющихся символов
Вариант решения задачи на языке программирования Python с LeetCode.
Категория: Алгоритмы.
Название задачи: Самая длинная подстрока без повторяющихся символов (Longest Substring Without Repeating Characters).
Сложность: Средняя.
Статус решения: "Решено".
Условие задачи:
Дана строка s. Найдите длину самой длинной подстрока без повторения символов.
Решение:
Python
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
# Словарь для отслеживания последней позиции каждого символа
char_index = {}
# Два указателя: начало текущей подстроки и максимальная длина
start = 0
max_length = 0
# Проходим по строке, символ за символом
for i, char in enumerate(s):
# Если символ уже встречался и находится в текущей подстроке
if char in char_index and char_index[char] >= start:
# Обновляем начало подстроки, пропуская повторяющийся символ
start = char_index[char] + 1
# Обновляем последнюю позицию текущего символа
char_index[char] = i
# Вычисляем длину текущей подстроки и обновляем максимальную длину
max_length = max(max_length, i - start + 1)
return max_length
Объяснение кода
Мы хотим найти длину самой длинной подстроки строки s, которая не содержит повторяющихся символов. Используем метод двух указателей (sliding window) для оптимального решения задачи:
Один указатель (start) отслеживает начало текущей подстроки.
Другой указатель (i) проходит по каждому символу строки.
Логика:
Если символ повторяется, перемещаем start за последний повтор.
Подсчитываем длину текущей подстроки (i - start + 1).
Обновляем максимальную длину.
Источник решения: hdhai.com