1.无重复字符的最长子串

Ryder 2024-8-19 9 8/19
class Solution(object):
    def lengthOfLongestSubstring(self, s) -> int:
        """
        :type s: str
        :rtype: int
        """
        window = set()
        left = 0
        right = 0
        max_length = 0
        for right in range(len(s)):
            while s[right] in window:
                window.remove(s[left])
                left += 1
            window.add(s[right])
            max_length = max(max_length, right - left + 1)
        return max_length


if __name__ == '__main__':
    print(Solution.lengthOfLongestSubstring(None, "abcabcbb"))
    print(Solution.lengthOfLongestSubstring(None, "bbbbb"))
    print(Solution.lengthOfLongestSubstring(None, "pwwkew"))

核心思想
滑动窗口:维护一个不包含重复字符的窗口
双指针:使用left和right两个指针表示窗口的边界
扩张与收缩:
右边界不断向右扩张
当遇到重复字符时,左边界向右收缩直到没有重复字符
实时更新:在每一步都更新最大长度
这种方法的时间复杂度是O(n),空间复杂度是O(min(m,n)),其中n是字符串长度,m是字符集大小。

- THE END -

Ryder

8月19日10:33

最后修改:2025年8月19日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论