私はこの宿題に関する質問に答えようとしています。部分文字列の異なる出現は、互いに重なり合う可能性があります。文字列内の部分文字列のすべての開始インデックスをオーバーラップしている部分を含めて高速に印刷する
サンプル1
入力:
TACG
GT
出力:
説明:パターンは、長いテキストよりであるためには発生していませんテキスト
サンプル2
入力:
ATA
ATATA
出力:
0~2
説明:パターンは位置1および3に表示されます(これらの2つの出現はお互いに重なる)。
試料3
ATAT
GATATATGCATATACTT
出力:
説明:パターンは、テキスト内の位置1、3で表示され、9 。
私が提出してる答えは、このいずれかになります。
def all_indices(text, pattern):
i = text.find(pattern)
while i >= 0:
print(i, end=' ')
i = text.find(pattern, i + 1)
if __name__ == '__main__':
text = input()
pattern = input()
all_indices(text, pattern)
しかし、このコードは、最終的なテストケースを失敗している:
失敗した場合の#64分の63:超過時間制限(使用時間:7.98/4.00、使用メモリ:77647872/536870912)
オンライン裁判官はピソで回答を送っていることを知っていますn、異なる言語の時間制限が異なります。
私は他の回答のためにかなり検索して近づいてきた:regexes、suffix trees、Aho-Corasick ...これまでのところ、それらのすべては、このシンプルなソリューションをアンダーパフォーム(find
がimplemented in Cあるかもしれないので?)。
私の質問です。このタスクをより速く行う方法はありますか?
@Barmarこの場合、私はちょうどこの質問の2番目に投票された答えを試みた:http://stackoverflow.com/questions/4664850/find-all-occurrences-of-a-substring-in-python?noredirect=1&lq=1、そして結果は同じ。 –
わかりません。バグは私には明らかではないようです。あなたがそれを自分で実行すると、最終的に終了するのですか?それはどのくらいかかりますか? – Barmar
@Barmar残念ながら、私たちはテストケースを提供していません:( –