Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中找到一行中重叠子字符串的最大数量?_Python_String_Substring - Fatal编程技术网

如何在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