Escriba un programa o función que, dadas dos cadenas ASCII A
y B
, producirá cadenas A'
y B'
donde las subcadenas comunes se invierten en su lugar. El proceso para encontrar A'
es el siguiente:
A'
Inicialmente está vacío.- Si el primer carácter de
A
está enB
, encuentre el prefijo más largo delA
cual es una subcadena deB
. Elimine este prefijo deA
y agregue su inversión aA'
. - De lo contrario, elimine este primer carácter
A
y agréguelo aA'
. - Repita los pasos 2-3 hasta que
A
esté vacío.
El hallazgo B'
se realiza de manera similar.
Ejemplo
Consideremos las cadenas A = "abc bab"
y B = "abdabc"
. Pues A'
esto es lo que sucede:
A = "abc bab"
: El primer carácter"a"
está en B y el prefijo más largo de A encontrado en B es"abc"
. Eliminamos este prefijo de A y agregamos su inversión"cba"
a A '.A = " bab"
: El primer carácter" "
no está en B, por lo que eliminamos este carácter de A y lo agregamos a A '.A = "bab"
: El primer carácter"b"
está en B y el prefijo más largo de A encontrado en B es"b"
. Eliminamos este prefijo de A y agregamos su inversión (que todavía está"b"
) a A '.A = "ab"
: El primer carácter"a"
está en B y el prefijo más largo de A encontrado en B es"ab"
. Eliminamos este prefijo de A y agregamos su inversión"ba"
a A '.A = ""
: A está vacío, así que nos detenemos.
Así llegamos A' = "cba" + " " + "b" + "ba" = "cba bba"
. Para B ', el proceso es similar:
B = "abdabc" -> "a" in A, remove prefix "ab"
B = "dabc" -> "d" not in A, remove "d"
B = "abc" -> "a" in A, remove prefix "abc"
Así llegamos B' = "ba" + "d" + "cba" = "badcba"
.
Finalmente, devolvemos las dos cadenas, es decir
(A', B') = ("cba bba", "badcba")
Casos de prueba
"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"
El código más corto en bytes gana.
"cba bba", "badcba"
incluir comillas y comas?