入力:アルゴリズムは、文字列と文字列の接頭間の最長接尾語の長さを見つけるために
あり、長い文字列S
があり、我々は文字列S
の接頭辞を表した整数A
の配列を持っています以下のようなA[i]
は、接頭辞に示しS[0..A[i]]
出力:
戻り0と同じサイズの配列Output[]
S = "ababa"
A[]=[0, 1, 2, 3, 4]
サンプル出力:
Output[]=[1,0,3,0,5]
最もナイーブなアルゴリズムOutput[i]
はS[0..A[i]]
とS
サンプル入力の最長一致接尾語の長さ私はすべてあります。A[i]
は、両方の文字列の末尾からS[0..A[i]]
とS
の間の文字数に一致します。しかし、このアルゴリズムは、nは元の文字列の長さであるO(n^2)
であるS.
質問:
は、事前のプロセスは、文字列のSとは、すぐに全体のために最長の長さのサフィックスを返すことができ、より良いアルゴリズムがありますです入力配列?
「S [1..A [i]]は何であるべきか説明できますか? '1'から' A [i] 'までの部分文字列? – Tim
ご迷惑をおかけしました。 S – pgiitu
の '0 [A] 'から' A [i]'までの部分文字列である 'S [0..A [i]]' @Tim - 位置 '0 'から' A [i] ] 'を' S'で実行します。 –