Пример решения задачи #3 на Python LeetCode — Самая длинная подстрока без повторяющихся символов

Опубликовано: 01.12.2024, 00:46 | Автор: hdhAI

Вариант решения задачи на языке программирования 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

Похожие статьи
Интересное





Warning: file_put_contents(/var/www/angella1/data/www/hdhai.com/counter/count.php): Failed to open stream: Permission denied in /var/www/angella1/data/www/hdhai.com/counter.php on line 89