Python中如何统计字符串中重叠重复子串的出现次数?
统计重叠子串出现次数
Python自带的str.count()方法默认不会统计重叠的匹配项,比如你用"abbbbbbc".count("bbb")得到2,是因为它只找不重叠的匹配(位置0-2和3-5)。要统计所有重叠的匹配,你可以自己实现一个函数:
def count_overlapping(s, sub): count = 0 sub_length = len(sub) s_length = len(s) # 遍历所有可能的起始索引,确保子串能完整取到 for i in range(s_length - sub_length + 1): if s[i:i+sub_length] == sub: count += 1 return count # 测试示例 print(count_overlapping("abbbbbbc", "bbb")) # 输出4
工作原理:
- 先计算原字符串和目标子串的长度,确定遍历的边界:起始索引最大为
原字符串长度 - 子串长度,这样最后一个索引对应的子串刚好能覆盖到原字符串的末尾。 - 逐个检查每个起始位置开始的子串是否和目标子串匹配,每匹配一次就把计数加1。
这个方法逻辑清晰,能处理各种重叠匹配的场景,不管子串长度是多少都适用。
内容的提问来源于stack exchange,提问作者Tut
相关产品推荐
相关产品推荐

