Es gibt eine lange String S
und wir haben eine Reihe von ganzen Zahlen A
welche die Präfixe des String bezeichnet S
wie A[i]
bezeichnet die Vorsilbe S[0..A[i]]
Output:
ein Array Output[]
von der gleichen Größe wie A
wo Output[i]
die Länge des längsten passenden Suffix S[0..A[i]]
und S
ist
Probe Input:
S = "ababa"
A[]=[0, 1, 2, 3, 4]
Beispielausgabe:
Output[]=[1,0,3,0,5]
Der naive Algorithmus, Ich habe für jeden A[i]
passen Sie einfach die Anzahl der Zeichen zwischen S[0..A[i]]
und S
vom Ende der beiden Strings. Aber dieser Algorithmus ist O(n^2)
wobei n die Länge des ursprünglichen String ist S.
Frage:
Gibt es einen besseren Algorithmus, der vor Prozesse der String S und dann schnell die längste Länge Suffix für die gesamte zurückkehren Eingabe-Array?
Können Sie erklären, was 'S [1..A [i]]' sein soll? Der Teilstring von '1' bis' A [i] '? – Tim
Sorry aktualisiert die Frage. es hätte 'S [0..A [i]]' sein müssen, was die Teilzeichenfolge von '0' bis 'A [i]' in S – pgiitu
@Tim ist - die Teilzeichenfolge von Position' 0 'bis Position' A [i ] 'in' S'. –