Scrivi un programma o una funzione che, dati due stringhe ASCII Ae B, produrranno stringhe A'e in B'cui le sottostringhe comuni sono invertite al loro posto. Il processo per la ricerca A'è il seguente:
A'è inizialmente vuoto.- Se il primo carattere di
Aè inB, trova il prefisso più lungo diAcui è una sottostringa diB. Rimuovi questo prefisso daAe aggiungi la sua inversione aA'. - Altrimenti, rimuovi questo primo carattere
Ae aggiungilo aA'. - Ripetere i passaggi 2-3 fino a quando non
Aè vuoto.
La ricerca B'viene eseguita in modo simile.
Esempio
Consideriamo le stringhe A = "abc bab"e B = "abdabc". Per A', questo è ciò che accade:
A = "abc bab": Il primo carattere"a"è in B e il prefisso più lungo di A trovato in B è"abc". Rimuoviamo questo prefisso da A e aggiungiamo la sua inversione"cba"ad A '.A = " bab": Il primo personaggio" "non è in B, quindi rimuoviamo questo personaggio da A e lo aggiungiamo ad A '.A = "bab": Il primo carattere"b"è in B e il prefisso più lungo di A trovato in B è"b". Rimuoviamo questo prefisso da A e aggiungiamo la sua inversione (che è ancora"b") ad A '.A = "ab": Il primo carattere"a"è in B e il prefisso più lungo di A trovato in B è"ab". Rimuoviamo questo prefisso da A e aggiungiamo la sua inversione"ba"ad A '.A = "": A è vuoto, quindi ci fermiamo.
Così otteniamo A' = "cba" + " " + "b" + "ba" = "cba bba". Per B ', il processo è simile:
B = "abdabc" -> "a" in A, remove prefix "ab"
B = "dabc" -> "d" not in A, remove "d"
B = "abc" -> "a" in A, remove prefix "abc"
Così otteniamo B' = "ba" + "d" + "cba" = "badcba".
Infine, restituiamo le due stringhe, vale a dire
(A', B') = ("cba bba", "badcba")
Casi 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"
Vince il codice più breve in byte.
"cba bba", "badcba"virgolette e virgola?