【Leetcode】3. 无重复字符的最长子串 <滑动窗口、双指针算法>

发布于:2023-01-04 ⋅ 阅读:(377) ⋅ 点赞:(0)

题目描述 : 3. 无重复字符的最长子串

在这里插入图片描述

考察算法 : 滑动窗口、双指针

闲话短说 : 在刷Leetcode题目的时候会发现,每次提交过后若AC,万事大吉,但若遇到过不去的坎,会给出错的样例,然后就可以根据这个去修改自身的代码,以达到AC。(显然这是想问题不太全面的结果,之后做题还是要多想想,想一些特殊情况以及边界问题)

AC code:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        length = len(s)
        left,right = 0,0
        res = -1
        new_s = ''
        # 判断子数组中是否有重复的字符,若没有,则结果就是原字符串的总长度
        flag = False
        while right < length:
            new_s = new_s + s[right]
            l = left
            for i in range(l,right):
                # 说明有重复的字符
                if s[i] == s[right]:
                    # 得到重复字符之前的字符串
                    new_s = s[left:right]
                    # 得到长度
                    res = max(res,len(new_s))
                    # 更新左指针
                    left = i + 1
                    # right 位置的字符与前面的有所重复,但是上一步的left已经将重复的
                    # 删除掉了,所以在末尾处我们需要 + 1
                    r = right + 1
                    # 更新没有重复字符的字符串
                    new_s = s[left:r]
                    flag = True
                    break
            right += 1
        if flag == False:
            res = length
        else :
            # 去除重复字符后,有可能之后的字符串的长度比之前所取得的值还要大,所以需要取一下max
            # eg: aabcde
            res = max(res,len(new_s))
        # print(new_s)
        return res

相关题目:【Leetcode】209. 长度最小的子数组 <滑动窗口,双指针算法>

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到