Escriba un programa o función que, dadas dos cadenas ASCII Ay 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
Aestá enB, encuentre el prefijo más largo delAcual es una subcadena deB. Elimine este prefijo deAy agregue su inversión aA'. - De lo contrario, elimine este primer carácter
Ay agréguelo aA'. - Repita los pasos 2-3 hasta que
Aesté 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?