私は入力文字列と配列している場合:私は、元s
を参照配列pos
の連続する要素間の最長の共通のプレフィックスを見つけようとしていますバッファを使用する最も長い共通プレフィックス?
s = "to_be_or_not_to_be"
pos = [15, 2, 8]
を。私は次の出力を取得しようとしています:私はこれを得
longest = [3,1]
方法は、次のペアの最長の共通のプレフィックスを計算することである:
_be_or_not_to_be
は3を与えている
_be
と
s[2:]
ある
s[15:]
1(_
)を与える_not_to_be
で_be_or_not_to_be
とs[8:]
ある(_be
)s[2:]
しかし、s
が巨大な場合は、s[x:]
のようにすると複数のコピーを作成したくありません。数時間の検索の後、私は入力文字列のコピーを1つだけ保持する関数bufferを見つけましたが、この文脈でここでそれを利用する最も効率的な方法は何か分かりませんでした。どのようにこれを達成するための任意の提案?
+1ありがとうございます。このスニペットのパフォーマンスをチェックし、すぐに戻ってみましょう。それは間違いなくクールに見える! :) – Legend
あなた 'commonprefix()'ソリューションはあまりにも複雑で、[自分のコメント](http://stackoverflow.com/questions/8073808/longest-common-prefix-using-buffer/8073962#8073962) – jfs
@JFSebastianを見ます私はあなたのコメントを見た。それは間違っている。彼の望む出力は '_ 'ではなく' [3、1] 'です。彼は、最初の2つの位置が、その後_only二two_は、お使いのバージョンがonce_で3つすべてを_considers、considered_ _only望んでいます。 – agf