统计字符串中子串出现次数的Python代码存在什么问题?
你找到的这段代码本身逻辑存在错误,你观察到的问题正是它无法正常运行的核心原因:
- 外层循环固定
i之后,内层循环始终拿同一个string[i]和子串的每一位sub_string[j]比较,只有子串所有字符完全一致的极端场景下,才能让j累加到等于子串长度,触发计数增加,其他情况完全无法得到正确结果。
如果要实现统计重叠子串出现次数的需求,可以参考下面的正确实现:
string = input("Enter the string: ") sub_string = input("Enter the substring: ") count = 0 sub_length = len(sub_string) str_length = len(string) # 遍历主串所有合法的起始匹配位置 for i in range(str_length - sub_length + 1): is_match = True # 从当前起始位开始逐位匹配子串 for j in range(sub_length): if string[i+j] != sub_string[j]: is_match = False break if is_match: count += 1 print(count)
你可以用测试用例验证:主串输入"ABABA",子串输入"ABA",上述代码会返回2(重叠匹配的正确结果),而Python内置的count方法只会返回1。

内容的提问来源于stack exchange,提问作者Sagar Mittal
相关产品推荐
相关产品推荐

