Schreiben Sie ein Programm oder eine Funktion, die bei zwei ASCII-Zeichenfolgen A
und B
Zeichenfolgen erzeugt A'
und B'
deren gemeinsame Teilzeichenfolgen an ihrer Stelle umgekehrt werden. Der Prozess zum Finden A'
ist wie folgt:
A'
ist anfangs leer.- Wenn das erste Zeichen von in
A
istB
, suchen Sie das längste Präfix,A
dessen Teilzeichenfolge von istB
. Entfernen Sie dieses Präfix ausA
und fügen Sie seine Umkehrung hinzuA'
. - Entfernen Sie andernfalls dieses erste Zeichen aus
A
und fügen Sie es hinzuA'
. - Wiederholen Sie die Schritte 2-3, bis sie
A
leer sind.
Das Finden B'
erfolgt ähnlich.
Beispiel
Betrachten wir die Zeichenfolgen A = "abc bab"
und B = "abdabc"
. Denn A'
genau das passiert:
A = "abc bab"
: Das erste Zeichen"a"
steht in B und das längste Präfix von A in B ist"abc"
. Wir entfernen dieses Präfix von A und fügen seine Umkehrung"cba"
zu A 'hinzu.A = " bab"
: Das erste Zeichen" "
ist nicht in B, also entfernen wir dieses Zeichen aus A und fügen es A 'hinzu.A = "bab"
: Das erste Zeichen"b"
steht in B und das längste Präfix von A in B ist"b"
. Wir entfernen dieses Präfix von A und fügen seine Umkehrung (die noch ist"b"
) zu A 'hinzu.A = "ab"
: Das erste Zeichen"a"
steht in B und das längste Präfix von A in B ist"ab"
. Wir entfernen dieses Präfix von A und fügen seine Umkehrung"ba"
zu A 'hinzu.A = ""
: A ist leer, also hören wir auf.
So bekommen wir A' = "cba" + " " + "b" + "ba" = "cba bba"
. Für B 'ist der Prozess ähnlich:
B = "abdabc" -> "a" in A, remove prefix "ab"
B = "dabc" -> "d" not in A, remove "d"
B = "abc" -> "a" in A, remove prefix "abc"
So bekommen wir B' = "ba" + "d" + "cba" = "badcba"
.
Schließlich geben wir die beiden Zeichenfolgen zurück, dh
(A', B') = ("cba bba", "badcba")
Testfälle
"abc bab", "abdabc" -> "cba bba", "badcba"
"abcde", "abcd bcde" -> "dcbae", "dcba edcb"
"hello test", "test banana" -> "hello tset", "tset banana"
"birds flying high", "whistling high nerds" -> "bisdr flyhgih gni", "wihstlhgih gni nesdr"
Der kürzeste Code in Bytes gewinnt.
"cba bba", "badcba"
Anführungszeichen und Komma enthält?Antworten:
Pyth, 29 Bytes
Kabelbaum testen.
Das Eingabeformat ist:
Ausgabe ist:
quelle
Haskell,
120111 BytesTestläufe:
quelle
SWI-Prolog, 312 Bytes
Beispiel:
a("birds flying high","whistling high nerds",X,Y).
AusgängeEine Art und Weise, Art und Weise zu langer Lösung , die wie zu zeigen , geht die ausführlichen Prolog ist , wenn sie mit Strings zu tun. Es könnte möglich sein, dieses Ding mit Codes arrays (
`birds flying high`
) anstelle von strings ("birds flying high"
) zu verkürzen .quelle
Python 2.7,
169156152141 BytesDie Funktion verwendet
m
die 2 Zeichenfolgen als Eingabe. Sie ruft dieb
Funktion zweimal auf und führt die eigentliche Verarbeitung gemäß den Spezifikationen durch.Demo hier .
Testen -
AUSGÄNGE:
PS: Danke an orlp für die Lösung mit
next()
quelle
m=lambda A,B:(b(A,B),b(B,A))
while len(A)>0
mit nur ersetzenwhile A
. Ähnlichif len(p)>0
wirdif p
.if len(p)
kann auch seinif p
. (Bereits oben gesagt, aber Sie haben es verpasst.)len(p)>0
zulen(p)
. Danke dafür :)while A:j=next((j for j in range(len(A),0,-1)if A[:j]in B),1);C+=A[:j][::-1];A=A[j:]
.