maxRepeating函数返回值类型错误及逻辑异常问题求助
maxRepeating函数返回值类型错误及逻辑异常问题求助
我来帮你排查并修复这个问题,先看看你的代码里存在的核心问题:
原代码的问题分析
class Solution: def maxRepeating(self, sequence: str, word: str) -> int: k = 0 check = word for x in range(len(sequence)//len(word)): if sequence.count(check) >= 1: check = check + word k += 1 else: return k break # 这里是语法错误!break不能在循环外使用
- 语法错误:最后一行的
break语句写在for循环外部,这违反了Python语法规则,会直接触发运行时报错。 - 逻辑漏洞:当所有循环迭代都满足子串存在的条件时,循环结束后函数没有返回最终计算的
k值,此时函数会默认返回None,而非预期的最大重复次数。比如你测试的sequence='ababab'、word='ab'场景,循环会完整执行3次,但最后因没有返回语句且存在语法错误,导致无法得到正确结果。
修复后的代码方案
这里提供两种修复思路,你可以根据需求选择:
方案一:基于原逻辑优化
保留你原本的思路,修正语法和逻辑缺陷:
class Solution: def maxRepeating(self, sequence: str, word: str) -> int: k = 0 check = word max_possible = len(sequence) // len(word) for _ in range(max_possible): # 用in关键字判断子串存在更直观高效 if check in sequence: k += 1 check += word else: break # 循环结束后返回最终的最大重复次数 return k
方案二:更严谨的连续重复检测
如果需要确保检测的是连续重复的子串(原逻辑也满足,但这个方案更精准):
class Solution: def maxRepeating(self, sequence: str, word: str) -> int: word_len = len(word) seq_len = len(sequence) max_k = 0 # 遍历每个可能的起始位置 for i in range(seq_len - word_len + 1): current_k = 0 current_pos = i # 连续检查是否匹配目标word while current_pos + word_len <= seq_len and sequence[current_pos:current_pos+word_len] == word: current_k += 1 current_pos += word_len # 更新记录的最大重复次数 if current_k > max_k: max_k = current_k return max_k
测试验证
针对你的测试用例sequence='ababab'、word='ab':
- 方案一的循环会执行3次,每次
check分别为'ab'、'abab'、'ababab',均能在sequence中找到,最终返回k=3,符合预期。 - 方案二会从位置0开始检测,连续匹配3次
'ab',得到current_k=3,最终返回max_k=3,同样符合预期。
备注:内容来源于stack exchange,提问作者ak231472
相关产品推荐
相关产品推荐

