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

求解最长无重复子串变体时陷入while循环困境

解决最长无重复子串代码中while循环死循环的问题

你的代码卡在第一个while循环,大概率是循环条件永远为真或者循环控制变量没有正确更新,结合最长无重复子串的常见解法(比如滑动窗口),以下是最可能的问题点和修复方案:

常见死循环原因&错误示例

最典型的错误是滑动窗口的右指针(或左指针)在循环内没有移动,导致循环条件一直满足:

def longest_unique_substring(s):
    max_len = 0
    start = 0
    char_map = {}
    end = 0
    result = ""
    while end < len(s):
        if s[end] in char_map:
            start = max(start, char_map[s[end]] + 1)
        current_len = end - start + 1
        if current_len > max_len:
            max_len = current_len
            result = s[start:end+1]
        # 这里漏掉了end += 1,导致end永远为0,循环无限执行
    return result

这段代码里end变量始终没有递增,end < len(s)永远成立,直接造成死循环。

修复后的正确滑动窗口实现

def longest_unique_substring(s):
    max_len = 0
    start = 0
    char_map = {}  # 存储字符最新出现的索引
    result = ""
    end = 0
    while end < len(s):
        # 只有当字符已存在且在当前窗口内时,才移动左指针
        if s[end] in char_map and char_map[s[end]] >= start:
            start = char_map[s[end]] + 1
        # 更新当前字符的最新索引
        char_map[s[end]] = end
        # 计算当前窗口长度并更新最长子串
        current_len = end - start + 1
        if current_len > max_len:
            max_len = current_len
            result = s[start:end+1]
        # 必须推进右指针,让循环能正常终止
        end += 1
    return result

调试检查清单

排查死循环时可以重点看这几点:

  • 确认while的终止条件(比如end < len(s))会在某个时刻变为假
  • 检查循环内的控制变量(如end、start)是否有正确的递增/递减操作
  • 哈希表类解法中,确保每次循环都更新字符的索引,避免重复判断逻辑出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:00:01