Ändern Sie die Zeichenfolgen, um sie gleich zu machen

8

Unter Bezugnahme auf HIER

  

Wir haben zwei Strings A und B mit demselben Super-Zeichensatz. Wir   müssen diese Zeichenfolgen ändern, um zwei gleiche Zeichenfolgen zu erhalten. In jeder Bewegung   Wir können eine der folgenden Operationen ausführen:

     

1- tausche zwei aufeinander folgende Zeichen einer Zeichenkette |   2- Tausche die erste und   die letzten Zeichen einer Zeichenfolge

     

Eine Bewegung kann für jede der beiden Strings ausgeführt werden. Was ist die Mindestanzahl?   von Zügen, die wir brauchen, um zwei gleiche Saiten zu erhalten? Eingang   Format und Einschränkungen: Die erste und die zweite Zeile der Eingabe   enthält zwei Saiten A und B. Es ist garantiert, dass die Supersätze ihre   Charaktere sind gleich. 1 & lt; = Länge (A) = Länge (B) & lt; = 2000 Alle   Eingabezeichen stehen zwischen 'a' und 'z'

Es sieht so aus, als müsste das mit dynamischer Programmierung gelöst werden. Aber ich bin nicht in der Lage, mit Gleichungen zu kommen. Jemand hat sie als Antwort vorgeschlagen - aber es sieht nicht gut aus.

%Vor%     
Andy897 19.02.2015, 06:18
quelle

1 Antwort

1

Sie haben zwei atomare Operationen:

  1. Tausche aufeinanderfolgende mit Kosten 1

  2. Tauschen Sie zuerst und zuletzt mit Kosten 1

Eine interessante Tatsache:

  1. und 2. sind identisch, wenn das Ende der Zeichenketten an die Zeichenketten angehängt werden soll (kreisförmige Zeichenkette)

So können wir eine allgemeinere Operation ableiten

  1. verschiebe ein Zeichen mit cost = | from - to | (über Grenzen hinweg)

Das Problem erscheint mir eher nicht zweidimensional, oder doch kann ich die Dimensionen nicht bestimmen. Nehmen Sie diesen Algorithmus als naiven Ansatz:

%Vor%     
CoronA 24.02.2015, 05:18
quelle

Tags und Links