如何在python中找到一行中重叠子字符串的最大数量?
我有以下字符串如何在python中找到一行中重叠子字符串的最大数量?,python,string,substring,Python,String,Substring,我有以下字符串 a=“aawjbdjsdjbjsqqaaasdndksdkjsdksjdjkjskjaaaaskjdsjdkjdkjdaaaaaaa” 我要做的第一件事是数一数队伍中的A: a.count(“a”)这很好用 接下来我要做的是找到最长重叠“A”的值。在这种情况下,它将是AAAAA(8倍)。 所以我希望我的输出是: 最长的polyA为8 有人知道我如何做到这一点吗?最好的方法是使用正则表达式: import re string = "AAWJBDJSDJBJSQQAAASDNDKS
a=“aawjbdjsdjbjsqqaaasdndksdkjsdksjdjkjskjaaaaskjdsjdkjdkjdaaaaaaa”
我要做的第一件事是数一数队伍中的A:
a.count(“a”)
这很好用
接下来我要做的是找到最长重叠“A”的值。在这种情况下,它将是AAAAA(8倍)。
所以我希望我的输出是:
最长的polyA为8
有人知道我如何做到这一点吗?最好的方法是使用正则表达式:
import re
string = "AAWJBDJSDJBJSQQAAASDNDKSDKJSDKSJDDJKJSKJAAAAASKJDSJDKJSDKJDAAAAAAAA"
print(len(max(re.findall('A+', string),key=len)))
在字符串中循环,跟踪最长的运行:
a = "AAWJBDJSDJBJSQQAAASDNDKSDKJSDKSJDDJKJSKJAAAAASKJDSJDKJSDKJDAAAAAAAA"
longest = 0
cnt = 0
for c in a:
if c == 'A':
cnt += 1
else:
longest = max(longest, cnt)
cnt = 0
longest = max(longest, cnt)
print(longest)
我可以想出两种方法 第一种方法使用正则表达式,易于编写。这对你的案子来说已经足够了
import re
string = "AAWJBDJSDJBJSQQAAASDNDKSDKJSDKSJDDJKJSKJAAAAASKJDSJDKJSDKJDAAAAAAAA"
print(len(max(re.findall('A+', string)))) # abusing the fact that longer strings are "larger"
第二种方法使用模式匹配,并且比较复杂。查看灵感。您正在寻找重复单个字符的最长子字符串-不重叠 以下函数将查找重复单个字符的最长子字符串,无论该字符是否为“a”
您可以在此处使用
itertools.groupby()
和max()
:
>>> from itertools import groupby
>>> a = "AAWJBDJSDJBJSQQAAASDNDKSDKJSDKSJDDJKJSKJAAAAASKJDSJDKJSDKJDAAAAAAAA"
>>> max(("".join(g) for _, g in groupby(a)), key=len)
AAAAAAAA
您是否希望/期望重复的子字符串以
A
开头,或者这只是一个示例,而JB
可能是另一个示例?不,在这种情况下,我只是在搜索多个重叠的A'sA regex匹配,因为A+
必须在字符串中尽可能早地开始,才能成为最长的匹配。因此,对“重叠”(而非重叠)的引用是多余的。您只需要字符串中As的最长序列。
>>> from itertools import groupby
>>> a = "AAWJBDJSDJBJSQQAAASDNDKSDKJSDKSJDDJKJSKJAAAAASKJDSJDKJSDKJDAAAAAAAA"
>>> max(("".join(g) for _, g in groupby(a)), key=len)
AAAAAAAA