如何在文件中找到最长的连续重复字符分组链

Posted

技术标签:

【中文标题】如何在文件中找到最长的连续重复字符分组链【英文标题】:How to find the longest chain of consecutively recurring character groupings in file 【发布时间】:2020-06-02 22:44:34 【问题描述】:

我是这个网站(和编程)的新手,但非常感谢我遇到的挑战的帮助。

我正在尝试编写一个程序来搜索提供的长 .txt 文件并查找特定字符组连续重复的实例,然后计算最高示例并将其与另一个文件进行比较(这是'现在不重要)。

所以对于具有以下长行的文件:

'dtcdtcdtcuiouiouiodtcdtcdtcdtcdtcuiouiioodtcdtc'

我想找到连续重复的“dtc”的最高实例。在行的开头,它这样做了三遍。然后在中间它这样做了四次。然后在最后它这样做了两次。所以我希望我存储的信息是 4。

但是,我正在努力实现这一点。正如我所说,我是新手,一直在努力寻找实现这一目标的最佳方法。到目前为止,我已经开始考虑以下选项:

read = textfile.read()
counter = 0

for i in range(len(read)):
        if (read[i:i + 2]) == 'dtc':
           counter += 1

但是,是的,我正在努力找出实现所需算法的最佳方法。如果您能指出我正确的方向,我将不胜感激。

非常感谢

【问题讨论】:

【参考方案1】:

我不确定它是否更有效,但您可以使用正则表达式:

s = open('file.txt').read()
found = re.findall(r'((dtc)+)', s, re.MULTILINE)
found.sort(key=lambda x: x[0])
biggest = found.pop()[0]

否则,除了外观更优雅的版本之外,您无能为力。

【讨论】:

非常感谢您的帮助和建议。这对我开始玩非常有用。感谢您的宝贵时间:)【参考方案2】:

这应该可行:

read = "dtcdtcdtcuiouiouiodtcdtcdtcdtcdtcuiouioiodtcdtc"

maxIter=len(read)
maxCounter=0
i=0
counter = 0
while (1):
    if i==maxIter: 
        break
    if(read[i:i+3]=="dtc"):
        counter+=1
        if counter>maxCounter:
            maxCounter=counter
        i+=3
    else:
        counter=0
        i+=1

附言在您的示例字符串中,“dtc”在中间重复了 5 次

【讨论】:

非常感谢您花时间回答。这是我开始探索的一个非常有用的框架。感谢您的宝贵时间:)

以上是关于如何在文件中找到最长的连续重复字符分组链的主要内容,如果未能解决你的问题,请参考以下文章

如何找到没有重复字符的最长子字符串?

ClickHouse 数组 - 在数组中找到最长的重复数字链

R中最长的公共子字符串在两个字符串之间找到不连续的匹配

如何用SQL解决连续几天的问题

如何删除字符串中的重复项

如何在 TRIE 中找到最长的字符串