«Это третий день моего участия в ноябрьском испытании обновлений. Подробную информацию об этом событии см.:Вызов последнего обновления 2021 г.".
【Ежедневные пробные серии】
LeetCode
200 простых вопросов
Описание темы
дана строкаs
, пожалуйста, найдите тот, который не содержит повторяющихся символовсамая длинная подстрокадлина.
Пример 1:
Ввод: s = "abcabcbb"
выход: 3
Объяснение: Поскольку самая длинная подстрока без повторяющихся символов — «abc», ее длина равна 3.
Пример 2:
Ввод: с = "бббб"
выход: 1
Объяснение: Поскольку самая длинная подстрока без повторяющихся символов — «b», ее длина равна 1.
Пример 3:
Ввод: s = "pwwkew"
выход: 3
Объяснение: Поскольку самая длинная подстрока без повторяющихся символов — «wke», ее длина равна 3. Обратите внимание, что ваш ответ должен быть длиной подстроки, «pwke» — это подпоследовательность, а не подстрока.
Пример 4:
Ввод: с = ""
вывод: 0
намекать
0 <= s.length <= 5 * 104
-
s
Состоит из английских букв, цифр, символов и пробелов
Идеи решения проблем
Идеи решения проблемы:
滑动窗口 + 双指针
установить двойной указатель,left
указывая на окнолевый конец,right
указывая на окноследующий элемент справа, размер окнаright - left
. Сначала установитеleft=0
,right=1
,фиксированныйleft
, постоянно в движенииright
,до того какright
указанный элемент уже существует в текущем окне, затем найдите позицию элемента в окне и наведите указатель на следующую позицию из этой позиции; илиright
Перемещено за пределы границы, на этот раз сравнениеmax_str
иright - left
size, возвращает самую большую подстроку.
реализация питона
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
length = len(s)
# 即长度为0或1,len(s)即为最长子串
if length < 2:
return length
# 初始化left,right两个指针
left, right = 0, 1
# 最长长度设置为1
max_str = 1
# 退出条件,right到达边界
while right < length:
# 当right未到达边界,且right指向的元素没有出现在子串中
while right < length and s[right] not in s[left: right]:
# right指针右移
right += 1
max_str = max(max_str, right - left)
# 当right未到达边界
if right != length:
# 将left指针移动到重复元素的下一个位置
left += s[left: right].index(s[right]) + 1
return max_str
Сегодняшняя регистрация завершена, текущий прогресс — 7/200.