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

Python重复子串模式判断代码处理超长字符串错误排查

重复子串模式问题代码错误原因分析

核心错误点

1. 计数变量未重置

你代码中的count = 0初始化语句放在了候选子串遍历循环的外部,每次校验完一个候选子串后,count的累计值不会被清空,校验下一个候选子串时会复用之前的计数结果,极易提前满足count == len(s)/lenOfRepStr的判断条件,错误返回True。
这就是你遇到的「中间片段存在不匹配仍返回True」的直接原因:前一个候选子串校验时累计的count值,加上当前候选子串前几次匹配的计数,刚好凑够了判断阈值,哪怕当前子串后续片段不匹配,也会被误判为符合要求。

2. 校验遍历区间设置错误

你写的range(0, len(s) - lenOfRepStr + 2, lenOfRepStr)属于冗余的错误写法,正确的遍历区间应为range(0, len(s), lenOfRepStr):因为步长是重复子串的长度,直接遍历到原字符串末尾即可,错误的区间参数会增加无效的切片校验,极端场景下也可能引发计数异常。

修正后的代码

def repeated(s):
    repeatedStrs = []
    i = int(len(s)/2) 
    while i != 0: 
        if s[0:i] == s[-i:]: 
            repeatedStrs.append(s[0:i]) 
        i -= 1
    for repeatedStr in repeatedStrs:
        count = 0 # 每次校验新候选子串时重置计数
        lenOfRepStr = len(repeatedStr)
        if lenOfRepStr > 0 and len(s) % lenOfRepStr == 0: 
            # 修正遍历区间
            for q in range(0, len(s), lenOfRepStr):               
                if repeatedStr != s[q : q+lenOfRepStr]: 
                    break 
                count += 1 
                if count == len(s)/lenOfRepStr: 
                    return True
    return False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:06:02