Écrivez un programme ou une fonction qui, étant donné deux chaînes ASCII Aet B, produira des chaînes A'et B'où les sous-chaînes communes sont inversées à leur place. Le processus de recherche A'est le suivant:
A'est initialement vide.- Si le premier caractère de
Aest dansB, recherchez le préfixe le plus longAqui est une sous-chaîne deB. Supprimez ce préfixe deAet ajoutez son inversion àA'. - Sinon, supprimez ce premier caractère
Aet ajoutez-le àA'. - Répétez les étapes 2-3 jusqu'à ce qu'il
Asoit vide.
La recherche B'se fait de la même manière.
Exemple
Examinons les chaînes A = "abc bab"et B = "abdabc". Car A'c'est ce qui se passe:
A = "abc bab": Le premier caractère"a"est en B et le préfixe le plus long de A trouvé en B est"abc". Nous supprimons ce préfixe de A et ajoutons son inversion"cba"à A '.A = " bab": Le premier caractère" "n'est pas en B, donc nous supprimons ce caractère de A et l'ajoutons à A '.A = "bab": Le premier caractère"b"est en B et le préfixe le plus long de A trouvé en B est"b". Nous supprimons ce préfixe de A et ajoutons son inversion (qui est toujours"b") à A '.A = "ab": Le premier caractère"a"est en B et le préfixe le plus long de A trouvé en B est"ab". Nous supprimons ce préfixe de A et ajoutons son inversion"ba"à A '.A = "": A est vide, alors nous nous arrêtons.
Ainsi nous obtenons A' = "cba" + " " + "b" + "ba" = "cba bba". Pour B ', le processus est similaire:
B = "abdabc" -> "a" in A, remove prefix "ab"
B = "dabc" -> "d" not in A, remove "d"
B = "abc" -> "a" in A, remove prefix "abc"
Ainsi nous obtenons B' = "ba" + "d" + "cba" = "badcba".
Enfin, nous renvoyons les deux chaînes, c'est-à-dire
(A', B') = ("cba bba", "badcba")
Cas de test
"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"
Le code le plus court en octets gagne.
"cba bba", "badcba"inclusion de guillemets et de virgules?