LeetCode#3 Python解

LeetCode#3 Python解_第1张图片
我依然是暴力解法,跟着题目意思走,结果超时了…
于是,我又去题解区学习,学到了滑动窗口这个方法。

1.用双指针,这样写简洁且容易理解:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        length,r,l = 0,0,0
        while r < len(s):
            if s[r] not in s[l:r]:
                r += 1
                length = max(length,r-l)
            else:
                l += 1
        return length

2.用容器,这比前一个效率低:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int: 
        max_length,cur_length,left = 0,0,0
        cur_s = set() #存放已经出现过的字符
        for i in range(len(s)):
            cur_length += 1
            while s[i] in cur_s:
                cur_length -= 1
                cur_s.remove(s[left])
                left += 1
            cur_s.add(s[i])
            max_length = max(max_length,cur_length)
        return max_length
               

你可能感兴趣的:(LeetCode每日一题,Python学习)