任务: 输入是一个由字符A、B、C组成的字符串.

找出连续的"A*A"或"C*C"子字符串的最大数目.

其中*符号代表任何可能的字符.

考虑到重叠.


输入:https://kompege.ru/files/sJDwcyfWx.txt

yields :21

语言:巨 Python

不带RegEX的解决方案(正确):

with open("./data/24_4546.txt") as f:
    s = f.readline().replace('\n', '')

c = m = 0
for j in range(3):
    for i in range(j, len(s) - 2, 3):
        if s[i] + s[i + 2] == "AA" or s[i] + s[i + 2] == "CC":
            c += 1
        else:
            m = max(m, c)
            c = 0

m = max(m, c)
print(m)

我try 使用正则表达式(不起作用):

import re
with open("./data/24_4546.txt") as f:
    s = f.readline().replace('\n', '')

print(len(max(re.sub(r"[^*]", " ", re.sub(r"(?=A[A-C]A)|(?=C[A-C]C)", "*", s)).split(), key=len)))

推荐答案

trick将在先行断言(?=...)中使用捕获组:

import re

with open("./data/24_4546.txt") as f:
    s = f.read().strip()

out = max(len(m) // 3  for m, *_ in re.findall(r'(?=((?:([AC]).\2)+))[AC]', s))
print(out)

打印:

21

Python相关问答推荐

我必须将Sigmoid函数与r2值的两种类型的数据集(每种6个数据集)进行匹配,然后绘制匹配函数的求导.我会犯错

点到面的Y距离

如何比较numPy数组中的两个图像以获取它们不同的像素

将jit与numpy linSpace函数一起使用时出错

scikit-learn导入无法导入名称METRIC_MAPPING64'

avxspan与pandas period_range

Python—从np.array中 Select 复杂的列子集

Pandas DataFrame中行之间的差异

用渐近模计算含符号的矩阵乘法

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

人口全部乱序 - Python—Matplotlib—映射

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

为什么Python内存中的列表大小与文档不匹配?

pandas fill和bfill基于另一列中的条件

freq = inject在pandas中做了什么?''它与freq = D有什么不同?''

简单 torch 模型测试:ModuleNotFoundError:没有名为';Ultralytics.yolo';

使用SQLAlchemy从多线程Python应用程序在postgr中插入多行的最佳方法是什么?'

Python日志(log)库如何有效地获取lineno和funcName?

如何获取给定列中包含特定值的行号?

我如何为测试函数的参数化提供fixture 生成的数据?如果我可以的话,还有其他 Select 吗?