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
もちろん、これはシーケンスが重ならないことを意味します。