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

如何检测含长度超2连续重复字符的字符串单词?解决索引溢出问题

解决索引溢出并完成长连续重复字符单词检测

先搞定索引溢出问题

你这段代码触发索引溢出,是因为循环里i的取值范围到了字符串的最后一位,这时候i+1、i+2直接超出了字符串的索引边界——毕竟字符串索引从0开始,最大索引是len(my_string)-1。

把循环范围改成range(len(my_string)-2)就好了,这样i的最大值是len(my_string)-3,i+2刚好是最后一个有效索引,不会越界:

my_string = "danieeeeel"
for i in range(len(my_string)-2):
    if my_string[i] == my_string[i+1] == my_string[i+2]:
        print('YES')
    else:
        print('NO')

实现完整的目标功能

要检测输入字符串里包含长度超过2的连续重复字符的单词,按下面的步骤来:

  1. 先把输入字符串里的所有单词提取出来(避开标点,比如"Well,"要拆成"Well")
  2. 逐个检查每个单词,只要有任意一处连续3个及以上相同字符,就把它加入结果列表
  3. 最后返回结果列表

完整代码实现:

import re

def detect_repet(s):
    result = []
    # 用正则提取所有纯单词(自动忽略标点)
    words = re.findall(r'\b\w+\b', s)
    for word in words:
        # 检查当前单词是否有连续3个相同字符
        has_long_repeat = False
        for i in range(len(word)-2):
            if word[i] == word[i+1] == word[i+2]:
                has_long_repeat = True
                break  # 找到一处就不用继续检查了
        if has_long_repeat:
            result.append(word)
    return result

# 测试你的示例输入
test_input = 'Well, sheep says beeeee and\ncat says miaaaaaaaw\nand cow would shout mooooooow'
print(detect_repet(test_input))

运行后输出正好是你要的:['beeeee', 'miaaaaaaaw', 'mooooooow']

额外说明

  • 用re.findall(r'\b\w+\b', s)是为了准确提取单词,避免把标点和单词混在一起
  • 检查重复字符时,只要找到一处连续3个相同的就停止检查,提升效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:24:48