You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python统计字符串中'BB'或'EE'的重叠出现频率

简化重叠子串统计代码的几种方法

你的核心需求是统计字符串中重叠出现的'BB'和'EE'次数,Python内置的str.count()因为只统计非重叠匹配,所以没法满足。下面给你几种比原循环更简洁的实现方式:

方法1:生成器表达式(无需额外库)

直接遍历所有可能的起始位置,用生成器表达式统计符合条件的子串数量,代码更紧凑:

s = input().strip()
count_bb = sum(1 for i in range(len(s) - 1) if s[i:i+2] == 'BB')
count_ee = sum(1 for i in range(len(s) - 1) if s[i:i+2] == 'EE')
print(f"BB出现次数:{count_bb},EE出现次数:{count_ee}")
  • 原理:range(len(s)-1)确保不会越界,每次取s[i:i+2]检查是否为目标子串,符合条件就加1,sum()直接汇总总数。

方法2:正则表达式(更简洁)

利用正则的正向预查特性,可以一次性匹配所有重叠的目标子串,再通过结果长度得到次数:

import re
s = input().strip()
count_bb = len(re.findall(r'(?=BB)', s))
count_ee = len(re.findall(r'(?=EE)', s))
print(f"BB出现次数:{count_bb},EE出现次数:{count_ee}")
  • 原理:(?=BB)是正向预查,它会匹配所有后面跟着'BB'的位置,不会消耗字符,因此能捕捉到重叠的情况(比如'BBB'里会匹配前两个B的起始位置和后两个B的起始位置,共2次)。

对比原代码的优化点

原循环里有冗余的判断(i>1),且变量a、b未初始化,上面的方法不仅更简洁,还避免了这些问题,可读性也更强。

内容的提问来源于stack exchange,提问作者Edward Jin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:12:07