计算字符串中重叠子串的数量

4 投票
6 回答
6339 浏览
提问于 2025-04-20 10:19

假设我有一个字符串 string = 'hannahannahskdjhannahannah',我想要计算里面出现了多少次 hannah 这个子串。可是我不能直接用 count 方法,因为它每次只会计算一次这个子串的出现次数。也就是说,我希望得到的结果是 4,但当我用 string.count('hannah') 来运行时,它只返回了 2

6 个回答

0

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。我们需要确保水不会洒出来,也就是要保证数据的完整性和安全性。

有些时候,数据在传输的过程中可能会出现问题,比如网络不稳定或者数据格式不对。这就像是你在倒水的时候,水桶的边缘不平整,水可能会溢出来。因此,我们需要一些方法来检查和处理这些问题,确保数据能够顺利到达目的地。

在编程中,我们可以使用一些工具和技术来帮助我们完成这个任务,比如使用错误处理机制来捕捉问题,或者使用数据验证来确保数据的格式是正确的。这些方法就像是在水桶上加一个盖子,防止水洒出来。

总之,处理数据就像是倒水的过程,我们需要小心翼翼,确保每一步都能顺利进行,这样才能保证最终得到我们想要的结果。

def Count_overlap(string, substring):   
    count = 0
    start = 0
 
    while start < len(string):
        pos = string.find(substring, start)
  
        if pos != -1:
            start = pos + 1
            count += 1
        else:
            break
    return count
string = "hannahannahskdjhannahannah"
print(Count_overlap(string, "hannah"))
0

如果你想要计算不连续的子字符串,这就是实现的方法。

def subword(lookup,whole):
    if len(whole)<len(lookup):
          return 0
    if lookup==whole:
          return 1
    if lookup=='':
          return 1
    if lookup[0]==whole[0]:
         return subword(lookup[1:],whole[1:])+subword(lookup,whole[1:])
    return subword(lookup,whole[1:])
1

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会按照我们的要求去做。

比如说,你可能希望程序在用户输入一个正确的密码后,才能让他们进入系统。这种情况下,你就需要用到条件判断。条件判断就像是在问“如果这个条件成立,那就做这个事情”。

在代码中,条件判断通常用一些特定的语法来表示。比如说,使用“if”这个词来开始一个条件判断,后面跟着你想要检查的条件,然后再写出满足条件时要执行的操作。

这样一来,程序就能根据不同的情况做出不同的反应,变得更加智能和灵活。

'''
s: main string
sub: sub-string
count: number of sub-strings found
p: use the found sub-string's index in p for finding the next occurrence of next sub-string
'''
count=0
p=0
for letter in s:
    p=s.find(sub,p)   
    if(p!=-1):
        count+=1
        p+=1
print count
2

这样做怎么样呢?

>>> d = {}
>>> string = 'hannahannahskdjhannahannah'
>>> for i in xrange(0,len(string)-len('hannah')+1):
...     if string[i:i+len('hannah')] == 'hannah':
...             d['hannah'] = d.get('hannah',0)+1
... 
>>> d
{'hannah': 4}
>>> 

这个代码会在字符串中查找,它是通过从字符串的开始位置(索引0)逐步切割字符串,一直到字符串长度减去的长度为止。

9

你可以用一个运行中的索引来获取下一个出现的内容:

bla = 'hannahannahskdjhannahannah'
cnt = 0
idx = 0
while True:
    idx = bla.find('hannah', idx)
    if idx >= 0:
        cnt += 1
        idx += 1
    else:
        break
print(cnt)

结果是:

>> 4

撰写回答