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

2022/1/27 1:04:54

本文主要是介绍Python刷力扣——3.无重复字符的最长子串,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

来源:力扣(LeetCode)

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

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”回到上一个无重复子串中!!!

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



这篇关于Python刷力扣——3.无重复字符的最长子串的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程