文字を含むファイルがあります。私は最も長い繰り返し文字の位置を見つける必要があります。たとえば、ファイルにaaassdddffccsdddfgssfrsfspppppppppppddsfs
が含まれている場合、私はppppppppppp
の位置を見つけるプログラムが必要です。私は.index
関数を使用して場所を見つける必要があることを知っていますが、ループにはまっています。最も長い繰り返し文字の位置を見つける
答えて
文字列全体をループする必要があります。あなたが出会う新しい手紙と、それがインデックスであることと、各シーケンスがどれくらいの間続くかを記録しておきます。 itertools.groupby
を使用して最大シーケンス
s = 'aaassdddffccsdddfgssfrsfspppppppppppddsfs'
max_c = max_i = max_len = None
cur_c = cur_i = cur_len = None
for i, c in enumerate(s):
if c != cur_c:
if max_len is None or cur_len > max_len:
max_c, max_i, max_len = cur_c, cur_i, cur_len
cur_c = c
cur_i = i
cur_len = 1
else:
cur_len += 1
else:
# One last check when the loop completes
if max_len is None or cur_len > max_len:
max_c, max_i, max_len = cur_c, cur_i, cur_len
print max_c, max_i, max_len
をのみを格納します。
import itertools
mystr = 'aaassdddffccsdddfgssfrsfspppppppppppddsfs'
idx = 0
maxidx, maxlen = 0, 0
for _, group in itertools.groupby(mystr):
grouplen = sum(1 for _ in group)
if grouplen > maxlen:
maxidx, maxlen = idx, grouplen
idx += grouplen
は、IDXと最長の同一の部分文字列の長さを与える:ここで
>>> print(maxidx, maxlen)
25, 11
>>> mystr[25:25+11]
'ppppppppppp'
groupby(enumerate(mystr)、key = itemgetter(1))の_、gの 'max((next(g)[0]、sum 、key = itemgetter(1))[0] ';) –
はoneliner
from itertools import groupby
from functools import reduce
[(k, next(g)[0], sum(1 for _ in g)+1) for k, g in groupby(enumerate(
'aaassdddffccsdddfgssfrsfspppppppppppddsfs'), key=itemgetter(1))]
です
上記(キー、位置、長さ)が生成されます。あなたは
from itertools import groupby
from functools import reduce
from operator import itemgetter
reduce(lambda x,y:x if x[2] >= y[2] else y,
((k, next(g)[0], sum(1 for _ in g)+1) for k, g in groupby(enumerate(
'aaassdddffccsdddfgssfrsfspppppppppppddsfs'), key=itemgetter(1))))
あなたはreduceの代わりにkey = itemgetter(2)でmaxを使うことができます – abcabc
これを達成する簡単な方法は、(.)(\1+)
と文字の繰り返しにマッチする正規表現を使用することですが軽減適用 で最大の長さを得ることができます。次に、生成者の理解度を使用してこれらの結果をすべてループし、長さ(key=len
)に従ってmax
を見つけます。最後に、最大の文字列を発見した、我々は最長繰り返し手紙が発生した場所を見つけるためにthestr.index()
を呼び出します。ここでは
import re
txt = "aaassdddffccsdddfgssfrsfspppppppppppddsfs"
idx = txt.index(max((''.join(f) for f in re.findall(r"(.)(\1+)", txt)), key=len))
print(idx)
がステージに出て壊れ同じコードです:の
>>> import re
>>> txt = "aaassdddffccsdddfgssfrsfspppppppppppddsfs"
>>> matches = list(''.join(f) for f in re.findall(r"(.)(\1+)", txt))
>>> print(matches)
['aaa', 'ss', 'ddd', 'ff', 'cc', 'ddd', 'ss', 'ppppppppppp', 'dd']
>>> longest = max(matches, key=len)
>>> print(longest)
ppppppppppp
>>> print(txt.index(longest))
25
- 1. 文字列内の最も長い繰り返し1の長さを見つける
- 2. で文字列の繰り返し文字を見つける
- 3. 文字列内に繰り返し文字を見つける
- 4. 文字列内の文字繰り返しの長さと位置の決定
- 5. C++の文字列配列で文字の最長シーケンスを見つける方法(繰り返し)
- 6. 繰り返し文字列で数を見つける
- 7. 最も長い繰り返し文字列を検索しますか?
- 8. 文字列内の文字の位置を見つける
- 9. JS - 文字列から最も長い繰り返しのない部分文字列を取得する
- 10. 文字を繰り返さないで最長のサブストリング - Java
- 11. LeetCode Problem3:最長サブストリング文字の繰り返し
- 12. 辞書内の文字列の中で最も長いサブシーケンスを見つける
- 13. 異なる数字の繰り返しシーケンスを見つける
- 14. Pythonで文字を繰り返さない最長の部分文字列
- 15. 数字のシーケンスの最後に繰り返しシーケンスを見つける
- 16. 文字列タスク(JavaScript)の中で最も長い単語を見つけるエラー
- 17. horizontalScrollViewで最も右の位置を見つける方法
- 18. 特定の文字列で繰り返しパターンを見つける
- 19. Javaで最初に繰り返し文字が見つからない場合
- 20. 文字列のリスト内のサブ文字列内の最初の文字の位置を見つける(Python 3)
- 21. MongoDb - arrayのelement1の位置がelement2の位置よりも小さい文書を見つける方法?
- 22. 文字列のコンソールエスケープコードの位置を見つける
- 23. リスト内の文字列の位置を見つけるC#
- 24. LINQを使用して文字列[]内で最も長い文字列を見つける方法
- 25. Pythonが文字列の位置を見つける
- 26. 文字列中で最も長い連続した部分文字列を見つける方法は?
- 27. 少なくともk個のオカレンスを持つ最長繰り返し部分文字列
- 28. 最長の文字列プレフィックスを見つける
- 29. アルファベット順に最長の部分文字列を見つける
- 30. 文字列中で最長の単語を見つける
可能な重複[最長のシーケンスを探します0の整数リスト](http://stackoverflow.com/questions/40166522/find-longest-sequence-of-0s-in-the-integer-list)(文字列をリストに変換するだけです) – DyZ
あなたが試したことを私たちに示す[mcve]を投稿してください。さもなければ、人々はあなたが私たちがあなたの宿題をやりたいと思うでしょう。 ;) –
これを完全に複製しました。おそらく宿題です。 http://stackoverflow.com/questions/2664150/counting-longest-occurence-of-repeated-sequence-in-python –