Es gibt 2 wichtige Aspekte in diesem Problem.
- Da wir S als Teil von S2 + reverse (S2) benötigen, sollten S2 haben atleast n/2 der Länge.
- Nach Verkettung von S2 und rückwärts (S2), gibt es ein Muster, bei dem die Alphabete wie
So ist die Lösung wiederholt von der Mitte von S zu prüfen, von S zu beenden für irgendwelche aufeinanderfolgenden Elemente.Wenn Sie einen finden, überprüfen Sie die Elemente auf jeder Seite wie gezeigt.
Nun, wenn Sie bis zum Ende des Strings zu erreichen sind in der Lage, dann ist die minimale Anzahl von Elementen (Ergebnis) ist der Abstand vom Beginn bis zu dem Punkt, wo man aufeinander folgende Elemente zu finden. In diesem Beispiel ist es c. 3.
Wir wissen, dass dies nicht immer passieren kann. Möglicherweise können Sie keine aufeinanderfolgenden Elemente in der Mitte finden. Sagen wir, die aufeinanderfolgenden Elemente sind nach dem Zentrum, dann können wir den gleichen Test machen.
Haupt String
Substring
verkettete Zeichenfolge
kommt jetzt t Er hat große Zweifel. Warum betrachten wir nur die linke Seite von der Mitte aus? Die Antwort ist einfach, die verkettete Zeichenfolge wird durch S + reverse (S) erzeugt. Daher sind wir sicher, dass das letzte Element in der Teilzeichenfolge in der verketteten Zeichenfolge aufeinanderfolgen wird. Es gibt keine Möglichkeit, dass eine Wiederholung in der ersten Hälfte der Hauptsaite zu einem besseren Ergebnis führen kann, da wir zumindest die n Alphabete in der letzten verketteten Zeichenfolge haben sollten Suche nach aufeinanderfolgenden Alphabeten geben ein Maximum von O (n) Die nun iterative Überprüfung von Elementen auf beiden Seiten kann eine Worst-Case-Komplexität von O (n) ergeben. d. h. maximale n/2-Vergleiche. Wir können viele Male bei der zweiten Überprüfung versagen, so dass wir eine multiplikative Beziehung zwischen den Komplexitäten haben, d. H. O (n * n).
Ich glaube, das ist eine richtige Lösung und hat noch keine Lücke gefunden.
Ist eine O (n^3) -Lösung akzeptabel? – Sayakiss
Nein, ich brauche eine bessere Lösung als O (n^3). – LTim