求助:排查统计字符串中子串出现次数的Python代码问题
子字符串统计问题的代码修复与优化
原代码的问题分析
你的代码存在两个核心问题,导致统计结果不准确:
- 未重置匹配缓存:
stock列表没有在每次外层循环(遍历起始位置)开始时清空,之前循环残留的字符会干扰后续匹配判断。 - 匹配逻辑冗余且错误:只要单个字符匹配就添加到
stock,但没有处理"部分匹配后中断"的情况,即使中间字符不匹配,仍会继续检查后续字符,且用stock和子串比对的方式不够直接。
修复后的代码(保留原思路)
count = 0 phrase = "abcdacdeabcf" sub = "abc" len_phrase = len(phrase) len_sub = len(sub) # 遍历所有可能的子串起始位置 for j in range(len_phrase - len_sub + 1): is_match = True # 逐个字符比对当前子串 for i in range(len_sub): if phrase[j + i] != sub[i]: is_match = False break # 不匹配直接跳出,无需继续检查 if is_match: count += 1 print(count) # 输出:2
更简洁的Python内置实现
Python字符串自带count()方法,可以直接完成不重叠子串的统计,代码更高效简洁:
phrase = "abcdacdeabcf" sub = "abc" print(phrase.count(sub)) # 输出:2
内容的提问来源于stack exchange,提问作者Alice S.
相关产品推荐
相关产品推荐

