You need to enable JavaScript to run this app. Python实现字符串连续三个相邻相同字母的检测及pythonic优化方案
优惠活动
大模型
产品
解决方案
定价
更多

Python实现字符串连续三个相邻相同字母的检测及pythonic优化方案

连续三相同字母检测的Python优化实现

原硬编码方案的固有缺陷

  • 维护效率低:需要手动枚举全部26个固定三字母组合,一旦检测规则调整(比如要匹配连续4个相同字母),需要重写整个硬编码列表
  • 运行效率差:每次检测需要对26个固定串逐一执行子串匹配,总计算量是26次字符串扫描的叠加,远高于单次线性扫描的成本

两种Pythonic 实现方案

1. 正则匹配实现(长字符串场景首选)

核心逻辑是通过带反向引用的正则模式,一次扫描就完成匹配,完全不需要预先生成所有字母组合串。

  • 匹配规则说明:r'([a-zA-Z])\1\1' 的含义是,先捕获任意大小写字母作为分组1,后续连续两次匹配和分组1完全相同的字符,刚好构成连续三个相同字母的检测逻辑。如果只需要匹配小写字母,只需要把字符范围调整为[a-z]即可。
  • 实现代码:
import re

# 预编译正则规则,多次调用时无需重复编译,大幅提升执行效率
THREE_SAME_LETTER_PATTERN = re.compile(r'([a-zA-Z])\1\1')

def has_three_consecutive_letters(target_str: str) -> bool:
    # search 方法匹配到第一个符合规则的内容就停止扫描,无需遍历完整字符串
    return bool(THREE_SAME_LETTER_PATTERN.search(target_str))
  • 规则调整成本极低:如果后续要修改检测要求,比如检测连续4个相同字母,只需要把正则中的\1\1改成\1\1\1即可,不需要改动大量硬编码内容。

2. 纯内置语法实现(零依赖)

核心逻辑是用Python内置的any()函数配合逐位切片判断,不需要引入任何外部模块,代码语义直白,没有正则学习成本。

  • 实现代码:
def has_three_consecutive_letters(target_str: str) -> bool:
    # 遍历所有连续三字符的起始位置,判断是否为相同字母
    return any(
        target_str[i] == target_str[i+1] == target_str[i+2]
        and target_str[i].isalpha()
        for i in range(len(target_str) - 2)
    )
  • 边界自动处理:当字符串长度小于3时,range(len(target_str)-2) 会自动生成空序列,any() 直接返回False,不需要额外编写边界判断逻辑。

样例验证

使用提供的三个典型检测样例调用上述实现,均可正确返回True,符合预期:

string1 = 'this is oooonly excaple'
string2 = 'nooo way that he did this'
string3 = 'I kneeeeeew it!'

print(has_three_consecutive_letters(string1)) # 输出 True
print(has_three_consecutive_letters(string2)) # 输出 True
print(has_three_consecutive_letters(string3)) # 输出 True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 04:06:05