如何检测含长度超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的连续重复字符的单词,按下面的步骤来:
- 先把输入字符串里的所有单词提取出来(避开标点,比如"Well,"要拆成"Well")
- 逐个检查每个单词,只要有任意一处连续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
相关产品推荐
相关产品推荐

