Python刷力扣——3.无重复字符的最长子串

来源:力扣(LeetCode)

链接:
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

Python刷力扣——3.无重复字符的最长子串

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        a={}
        start=res=0
        for i in range(len(s)):
            if s[i] in a:
                start=max(start,a[s[i]])
            res=max(res,i-start+1)
            a[s[i]]=i+1
        return res

思路:

在本题中求无重复字符、“子串”,联想到用一个字典“a”存储字符。以及用一个变量“start”标记一下要求的字符的起点,用一个变量“res”存储最长子串的长度。首先,遍历字符串“s”,然后,判断一下当前遍历的字符“s[i]”是否在“a”字典中。如果在,说明遇见重复字符,我们要将字符起点“start”变量重新赋值为当前位置。计算一下最长子串的长度“res”,取所有值中的最大值。最后将重复的字符的位置更新一下。

注意第一个无重复子串找到后,在后面的子串中会有多个字符与前面已找到子串重复!!!举个例子,“abba”。第一个满足要求的子串是“ab”,下一个字符“b”时“start”变成了“2”,如果不加“max(start,a[s[i]])”直接写成“start=a[s[i]]”,在下一个字符“a”时“start”就变成了“1”,导致错误。总之,要防止起点“start”回到上一个无重复子串中!!!

本文为学习算法的小白发布,不喜勿喷

上一篇:Java流程控制04--while、do-while、for循环详解


下一篇:Initialization failed for ‘https://start.spring.io‘ Please check URL, network and proxy settings