首页 > 解决方案 > 计算子串计数

问题描述

假设我有一个字符串aaa,并且我想要 this 中所有子字符串的计数aaa。我通过以下代码做到这一点:

如果我使用以下代码:

s="aaa"   
res = [s[i: j] for i in range(len(s))for j in range(i + 1, len(s) + 1)]
d={}
for i in res:
    if i not in d.keys():
        d[i]=s.count(i)
print(d)

我得到输出:

{'a': 3, 'aa': 1, 'aaa': 1}

但是根据我的需要,我希望计数为aa两个,因为有一次我可以aa从两个位置中选择,即aafroms[0:2]和 other from s[2:4]

如果我像下面这样修改我的代码,我会得到想要的结果,aa但现在的计数a是错误的。

s="aaa"
res = [s[i: j] for i in range(len(s))for j in range(i + 1, len(s) + 1)]
d={}
for i in res:
    if i not in d.keys():
        d[i]=0
        for j in range(len(s)+1):
            d[i]+=s[:j].count(i)
print(d)

我得到以下错误的输出:

{'a': 6, 'aa': 2, 'aaa': 1}

任何人都可以帮助我获得所需的输出吗?

期望的输出:

{'a': 3, 'aa': 2, 'aaa': 1}

标签: pythondictionarycountsubstring

解决方案


我认为这就是你想要的:

s = "aaa"
res = [s[i: j] for i in range(len(s))for j in range(i + 1, len(s) + 1)]
d = {}
for i in res:
     if i not in d.keys():
             d[i] = 1
     else:
             d[i] += 1
print(d)

推荐阅读