时间与空间复杂度问题

一个关于Python 开发的问题,给定一个字符串s,找到其中最长的无重复字符子串的长度。设计一个算法来解决此问题。要求时间复杂度为O(n),空间复杂度为O(1)。

def lengthOfLongestSubstring(s: str) -> int:
    d = {}
    left, right = 0, 0
    max_len = 0
    while right < len(s):
        if s[right] in d and d[s[right]] >= left:
            left = d[s[right]] + 1
        d[s[right]] = right
        max_len = max(max_len, right - left + 1)
        right += 1
    return max_len


  • 你看下这篇博客吧, 应该有用👉 :证明python的列表索引运算符是否为O(1)
  • 除此之外, 这篇博客: 【Python】数据结构与算法中的 1.2 O(n) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • (1)案例:单重循环:

    在这里插入图片描述

    (2)O(n)的含义:x轴为n,y轴为操作的数量。O(n)即代表n和操作数量成正比。

    在这里插入图片描述

    (3)丢弃常量:在讨论O(n)时,我们不关心斜率,即不关心操作数量具体是n的1倍还是2倍还是3倍,只要成正比,统统简化为O(n)。