Python统计字符串中'bob'出现次数的循环计数错误求解
问题描述
需求为编写程序,统计并打印字符串s中目标子串'bob'的出现次数。原有代码存在逻辑错误:只要字符串中存在'bob',遍历过程中会计数多次,结果不符合预期。
原有错误代码如下:
numOfBobs = 0 for word in s: if 'bob' in s: numOfBobs += 1 print(numOfBobs)
错误原因分析
- 循环逻辑错误:
for word in s是逐字符遍历字符串,并非遍历可能的子串 - 判断条件错误:
'bob' in s是判断整个字符串是否包含'bob',只要存在一次匹配,每次循环都会触发计数累加,最终结果等于字符串长度(只要串内存在bob),和实际出现次数无关 - 不需要使用嵌套循环,固定长度子串统计用滑动窗口切片的方式实现更简洁高效
正确实现代码
numOfBobs = 0 # 遍历所有长度为3的子串的起始索引,避免索引越界 for i in range(len(s) - 2): if s[i:i+3] == 'bob': numOfBobs += 1 print(numOfBobs)
实现说明
- 目标子串长度固定为3,因此起始索引最大可取到
len(s)-3,对应range(len(s)-2)的遍历范围 - 每次通过切片取当前索引开始的连续3个字符和目标串比对,匹配成功才累加计数
- 该写法可以正确统计重叠出现的
'bob',例如s = 'bobob'时,位置0和位置2各匹配一次,最终输出结果为2,符合计数预期
内容的提问来源于stack exchange,提问作者Afonso Britto
相关产品推荐
相关产品推荐

