最も長い反復部分文字列を見つける方法は? [閉鎖]

最も長い反復部分文字列を見つける方法は? [閉鎖]

Ubuntuで次の問題を解決する方法を知っている人はいますか?テキストファイルに文字列があります。最も長い部分文字列を見つける方法S~へSそれ自体は元の文字列の部分文字列にリンクされていますか?

たとえば、元の文字列がある場合、hfhfggccaggccagccafff出力は必要ですggcca。しかし、元の文字列の長さが約700,000文字であれば、どのようなプログラムやスクリプトが機能しますか?

私の努力はPythonスクリプトです

import re

s = 'hfhfggccaggccagccafff'
def find(s):
    r=max(re.findall(r'((\w+?)\2+)', s), key=lambda t: len(t[0]))

    return r

print(find(s))

ベストアンサー1

GNU grepを使用してください:

echo hfhfggccaggccagccafff |
grep -Po '(.*)\K\1' | awk 'length > l {l=length;s=$0} END{print s}'

ggcca

もちろん、これはシーケンスが重ならないことを意味します。

おすすめ記事