You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历Python列表在每个元素停留 求解无重复字符最长子串

问题背景

尝试不使用Set结构求解无重复字符的最长子串问题。
原定解题思路:以字符串的每个元素为起点,向右逐个遍历字符直到发现重复值,记录当前无重复子串的长度,再移动到下一个起点重复操作,最终取所有结果里的最大值。
当前代码无法实现「以每个元素为起点遍历后续内容」的逻辑,现有代码如下:

def lengthOfLongestSubstring(self, s):
    mylist = list(s)
    mylist2 = list(s)
    final_res = []
    res = []

    for i in mylist2:
        for char in mylist:
            if char in res:
                res=[]
                break
            else:
                res.append(char)
            if len(res) > len(final_res):
                final_res = res
    return final_res
代码问题点
  • 两层循环都是遍历完整字符串,内层循环没有和外层的起点绑定,每次都从字符串头部开始扫描,完全不符合从当前起点向右遍历的需求
  • 列表直接赋值是引用传递,后续修改res时会连带改变已经存入final_res的内容
  • 题目核心要求是计算最长子串的长度,不需要存储完整子串,直接记录长度的写法运行效率更高
修正后代码(无Set实现)
def lengthOfLongestSubstring(self, s):
    max_length = 0
    str_length = len(s)
    # 逐个确定子串起点
    for start in range(str_length):
        appeared = []
        # 从当前起点向右遍历
        for end in range(start, str_length):
            # 碰到重复字符,直接结束当前起点的遍历
            if s[end] in appeared:
                break
            appeared.append(s[end])
            # 更新最大长度
            current_length = end - start + 1
            if current_length > max_length:
                max_length = current_length
    return max_length

如果需要返回最长无重复子串本身,只需要额外增加两个变量记录最长子串的起止索引,最后对原字符串切片即可。

这个实现完全遵循最初的解题思路,没有使用Set结构,仅用列表完成字符重复判断。

内容的提问来源于stack exchange,提问作者Eddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:18:33