Python递归判断字符串可由指定片段拼接的bug如何修复
你的递归思路完全可行,不需要更换实现方案,问题出在循环内的返回逻辑上:原代码只要匹配到第一个符合要求的前缀,就会直接返回该分支的递归结果,哪怕这个结果是False,也不会继续尝试其他前缀分支,所以才会出现匹配完'a'失败就直接返回False、不会走'ab'分支的问题。
修改方案很简单,只需要调整循环内的返回逻辑:只有当前前缀对应的递归分支返回True时,才向上返回结果;如果返回False,就继续循环尝试下一个前缀,所有前缀都尝试失败后再返回False。另外补充空串的边界判断逻辑会更严谨,覆盖刚好把字符串完全切分的场景。
修改后的代码如下:
def valid_sequence(x, seglist): # 空串代表已经完全拼接完成,直接返回True if x == '': return True if x in seglist: return True for i in seglist: if x.startswith(i): # 仅当前分支匹配成功才返回,否则继续尝试下一个前缀 if valid_sequence(x[len(i):], seglist): return True # 所有前缀都尝试失败才返回False return False
用你之前报错的测试用例验证:x='abc',seglist=['a','ab','c'],代码会先尝试匹配前缀'a',递归验证剩余字符串'bc'失败后,不会直接返回,而是继续尝试下一个前缀'ab',匹配后剩余字符串'c'存在于seglist中,最终返回True,符合预期。
内容的提问来源于stack exchange,提问作者lemme
相关产品推荐
相关产品推荐

