力扣刷题之无重复字符的最长子串(python)

题目如图

力扣刷题之无重复字符的最长子串(python)_第1张图片


代码如下:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        max_len = 0        # 最大长度
        n = []                 # 放字符串的一个数组    
        for a in s:
            while a in n:
                del n[0]           # 删除数组左边第一个,直到没有重复的字符串
            n.append(a)       
            if len(n) > max_len:
                 max_len = len(n)
        return max_len
        

思路如下:

因为题目只需要求最大长度,所以我们要先设置一个最大长度(max_len),

然后我们通过for循环来遍历字符串,

这个时候我们会需要一个数组来存放和操作遍历出的子串,所以我们创建一个新的数组n。

然后我们通过滑动窗口的思想(遇见重复的直接将最左边的子串移出)来操作,

通过while循环取得有效数组后,我们通过len()取得数组长度·。

取得有效数组长度后与此前的最大长度比较,最后输出最大长度。

通过while循环,我们删除n[0]实现的效果实际为最左边重复项的后一位如:
n = [1,2,3,4,3] 循环后为 n = [4,3],符合有效数组条件时会跳出while循环并将长度记录所以不用担心遗漏。


用哈希表写会比较好,但是我哈希表不太会,嘿嘿

你可能感兴趣的:(leetcode,算法,python)