Napisz program lub funkcję, która, biorąc pod uwagę dwa łańcuchy ASCII Ai B, wygeneruje łańcuchy A'i B'gdzie wspólne podciągi są odwrócone w ich miejsce. Proces wyszukiwania A'jest następujący:
A'jest początkowo pusty.- Jeśli pierwszy znak
Ajest wB, znajdź najdłuższy przedrostek,Aktórego jest podłańcuchemB. Usuń ten prefiks zAi dodaj jego odwrócenie doA'. - W przeciwnym razie usuń ten pierwszy znak z
Ai dodaj go doA'. - Powtarzaj kroki 2-3, aż
Abędzie pusty.
Znalezienie B'odbywa się podobnie.
Przykład
Rozważmy ciągi A = "abc bab"i B = "abdabc". Bo A'tak się dzieje:
A = "abc bab": Pierwszy znak"a"znajduje się w B, a najdłuższy prefiks A w B to"abc". Usuwamy ten prefiks z A i dodajemy jego odwrócenie"cba"do A '.A = " bab": Pierwszy znak" "nie znajduje się w B, więc usuwamy ten znak z A i dodajemy go do A '.A = "bab": Pierwszy znak"b"znajduje się w B, a najdłuższy prefiks A w B to"b". Usuwamy ten prefiks z A i dodajemy jego odwrócenie (które jest nadal"b") do A '.A = "ab": Pierwszy znak"a"znajduje się w B, a najdłuższy prefiks A w B to"ab". Usuwamy ten prefiks z A i dodajemy jego odwrócenie"ba"do A '.A = "": A jest puste, więc przestajemy.
Tak otrzymujemy A' = "cba" + " " + "b" + "ba" = "cba bba". W przypadku B 'proces jest podobny:
B = "abdabc" -> "a" in A, remove prefix "ab"
B = "dabc" -> "d" not in A, remove "d"
B = "abc" -> "a" in A, remove prefix "abc"
Tak otrzymujemy B' = "ba" + "d" + "cba" = "badcba".
Na koniec zwracamy dwa ciągi, tj
(A', B') = ("cba bba", "badcba")
Przypadki testowe
"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"
Najkrótszy kod w bajtach wygrywa.
"cba bba", "badcba"cytowań i przecinków?