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 -
最后修改:2025年8月19日
共有 0 条评论