Längste sogar langen palindromische Ansprüche (mit unterschiedlichen benachbarten Zeichen mit Ausnahme der Mitte 2 Buchstaben)
-
29-09-2020 - |
Frage
Sie erhalten eine Zeichenfolge s, die Kleinbuchstaben enthält. Sie müssen die Länge der größten Ansprüche von S finden, die das folgende Muster erfüllt: X1, x2, x3 ... xn, xn, ... x3, x2, x1 Wenn XI ein Zeichen von S ist n.
Input: Die Zeichenfolge: s
Ausgang: Die Ganzzahl: 2n
Einschränkung: 1 <= | s | <= 10 ^ 3
Beispieleingang 1: "ACDBDEA"
Beispielausgabe 1: 4
Erläuterung: "Adda" ist die längste Ansprüche nach dem angegebenen Muster.
Beispieleingang 2: "abbacdeedc"
Beispielausgabe 2: 6
Erläuterung: "cdededc" ist die längste Annahme nach dem angegebenen Muster.
Beispieleingang 3: "Taker"
Beispielausgabe 3: 0
Erläuterung: Keine Ansprüche folgt dem angegebenen Muster.
Diese Frage wurde in einem kodierenden Interview gestellt, und ich wusste nicht, wie er es löst. Ich habe verstanden, wie man die längste palindromische Ansprüche ermittelt, aber weiß nicht, wie man den eindeutigen benachbarten Zeichenteil implementiert. Bitte helfen Sie. Pseudocode ist in Ordnung.
Lösung
Hier ist die goldene Regel der dynamischen Programmierung.
Wenn Lösungen für kleinere Unterprobleme aufgrund von fehlenden Informationen nicht in Lösungen für größere Subprobleme kombiniert werden können, erweitern Sie die Unterprobleme mit
$ s $ ist eine Folge von $ N $ Buchstaben oder, $ s [0: n]. $
lass $ l [i] [j] $ Sei die Länge der längsten palindromischen Ansprüche von $ s [i : j] $ . Es ist leicht, die Basisfälle herauszufinden, und durch Erhöhen des
Fügen Sie nun den Zustand der gerade Länge hinzu. Lassen Sie $ E [I] [J] $ die Länge der längsten gleichmäßigen palindromischen Darstellung von $ s [i : j] $ . Wir können die Basisfälle und die Rezidivierungsbeziehungen für $ E [I] [J] $ , ähnlichden, die denen von
Fügen Sie nun den Zustand verschiedener benachbarter Buchstaben hinzu, d. H. Es kann kein Brief zweimal in Folge auftreten, außer dem Buchstaben in der Mitte. Lassen Sie $ D [i] [j] $ Seien Sie die Länge der längsten unglaublichen digitalen, angrenzenden PALINGROMIC-Anschließung von $ S [i: j] $ . Wie Sie vielleicht darauf hingewiesen haben, können wir die Rezidivierungsbeziehungen für $ D [I] [J] $ nicht herausfinden können, da sich ein solches Nachdenken an eine längere Erweiterung längere einführen könnte Buchstaben.
Die goldene Regel kommt zu Rettung. Fügen Sie einen weiteren Parameter hinzu, der den Buchstaben am Ende der längsten nachfolgenden Nacheinander klassifiziert, so dass wir feststellen können, wie Sie diese Anordnung ordnungsgemäß erweitern können.
lass $ d [i] [j] [\ lambda] $ Sei die Länge der längsten geradlinigen, angrenzenden paländischen, angrenzenden paländlichen, angrenzenden PALINGROMIC von
-
Die endgültige Antwort ist der größere von $ \ MAX_ \ LAMBDA D [0] [N-1] [\ lambda] $ und
$ 0 $ . -
Angenommen, der erste
$ \ Text {'} A \ Text {'} $ in $ s $ at oder nach $ s [i] $ erscheint in $ s [\ vec {i _ {\ text { '} a \ text {'}}}] $ . Angenommen, der erste $ \ Text {'} a \ text {'} $ in $ s $ wird angezeigt $ s [\ overleftarrow {j _ {\ Text {'} A \ Text {'}}}] $ vor $ s [j] $ rückwärts gesucht. $ \ vec {i _ {Text {\ Text {'} \ Text {'}}} $ oder $ \ overleftarrow {j_ {\ text {'} \ text {'}}} $ ist auf $ - 1 $ eingestellt, wenn $ \ text {'} a \ text {'} $ ist nicht gefunden. Wir haben, für $ j \ ge i + 2 $ , $$ D [I] [J] [\ Text {'} a \ text {'}]=begin {cases} \ max (2, 2 + \ max _ {\ \ mu \ NOT=Text {'} a \ text {'}} d [\ vec {i _ {\ text {'} a \ text {'}} \ text {'}}} + 1] [\ overleftarrow {j _ {\ text {'} \ text {'}}}] [\ mu]) & \ Text {if} 0 \ le \ vec {i _ {\ text {'} a \ text {'}} }} \ lt \ overleftarrow {j _ {\ text {'} a \ text {'}} \\ \\ -1 & \ Text {sonst,} \\ \ ENDE {Hüllen} $$ Wo $ \ mu $ über alle Kleinbuchstaben ausgeführt wird.
-
Der Basisfall ist $$ D [i] [i] [\ text {'} a \ text {'}]= 0. $$
Verallgemeinerung $ \ Text {'} A \ Text {'} $ an Variable $ \ lambda $ , wir können den Wiederholungsbeziehung und den Basisfall für $ d [i] [j] [\ lambda] $ schreiben.
Beachten Sie, dass mit den zusätzlichen Informationen, die in dem Parameter $ \ Lambda $ ausgeführt wurden, einfach, um die Rezidivrelation abzuleiten.
Während dieser Versuch erfolgreich ist, können wir es besser machen.
Wir können die Unterprobleme vereinfachen.
lass $ f [i] [j] $ Sei die Länge der längsten derjenigen, die bei $ s beginnt [i] $ und endet bei
$$ F [I] [J]=begin {cases}
\ max (2, 2 + \ max _ {\ \ mu \ nicht= s [i]} f [\ vec {i_ \ \ mu}] [\ overleftarrow {j_ \ mu}]) & \ Text {if} s [i]= S [j], \\
-1 & \ Text {sonst,} \\
\ ENDE {Hüllen} $$
wo $ - 1 $ steht für "nicht gefunden". Für alle Kleinbuchstaben $ \ mu $ , $ s [\ vec {i_ \ mu}] $ Ist der erste
Die endgültige Antwort ist der größere von $ \ max_ {i, j} f [i] [j] $ und 0.