如何计算另一个字符串中的重叠字符串?

时间:2014-06-22 13:59:48

标签: python string

如果我有一个字符串str1=boobbobobpzfsbobboobbobb,我想计算字符串'bob'在其中的次数。但是,我不能使用str1.count,因为它只计算非重叠字符串。那我该怎么办?

4 个答案:

答案 0 :(得分:2)

使用regular expression(正向前瞻断言):

>>> import re
>>> str1 = 'boobbobobpzfsbobboobbobb'
>>> sum(1 for m in re.finditer('b(?=ob)', str1))
4

答案 1 :(得分:2)

你可以通过考虑从递增索引开始的所有子串并计算从"bob"开始的子串来在二次时间(最差情况)中求解它:

str1 = "boobbobobpzfsbobboobbobb"

times = 0   
for pos in range(len(str1)):
    if str1[pos:].startswith("bob"):
        times += 1

print(times)

或:

str1  = "boobbobobpzfsbobboobbobb"

times = sum(1 for x in range(len(str1)) if str1[x:].startswith("bob"))

print(times)

答案 2 :(得分:0)

import re

str1 = 'boobbobobpzfsbobboobbobb'

len(re.findall('b(?=ob)',str1)) 

答案 3 :(得分:0)

这是一个小单行:

str1 = "boobbobobpzfsbobboobbobb"
str2 = 'bob'

count = sum([str1[k:k+len(str2)]==str2 for k in range(0, len(str1)-len(str2)+1)])

# OUTPUT: 4