İki ASCII dizesi verilen Ave Bdizeler üretecek A've B'ortak alt dizelerin yerine ters çevrildiği bir program veya işlev yazın . Bulma süreci A'aşağıdaki gibidir:
A'başlangıçta boştur.- İlk karakteri ise
AiçindedirB, en uzun önek bulmakAbir alt dize olanB. Bu öneki kaldırınAve tersine dönmesini ekleyinA'. - Aksi takdirde, bu ilk karakteri karakterden kaldırın
Ave grubuna ekleyinA'. ABoş olana kadar 2-3 . Adımları tekrarlayın .
Bulma B'da benzer şekilde yapılır.
Misal
Dizeleri ele alalım A = "abc bab"ve B = "abdabc". Çünkü A'olan budur:
A = "abc bab": İlk karakter"a"B'de ve B'de bulunan A'nın en uzun ön eki"abc". Bu öneki A'dan kaldırır ve tersini"cba"A ' ya ekleriz .A = " bab": İlk karakter" "B'de değildir, bu yüzden bu karakteri A'dan kaldırır ve A 'ya ekleriz.A = "bab": İlk karakter"b"B'de ve B'de bulunan A'nın en uzun ön eki"b". Bu öneki A'dan kaldırır ve tersine (hala"b") A'ya ekleriz .A = "ab": İlk karakter"a"B'de ve B'de bulunan A'nın en uzun ön eki"ab". Bu öneki A'dan kaldırır ve tersini"ba"A ' ya ekleriz .A = "": A boş, bu yüzden duruyoruz.
Böylece anlıyoruz A' = "cba" + " " + "b" + "ba" = "cba bba". B 'için süreç benzerdir:
B = "abdabc" -> "a" in A, remove prefix "ab"
B = "dabc" -> "d" not in A, remove "d"
B = "abc" -> "a" in A, remove prefix "abc"
Böylece anlıyoruz B' = "ba" + "d" + "cba" = "badcba".
Son olarak, iki dizeyi döndürüyoruz, yani
(A', B') = ("cba bba", "badcba")
Test senaryoları
"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"
Bayt cinsinden en kısa kod kazanır.
"cba bba", "badcba"tırnak işaretleri ve virgül içermeye benzemesi bekleniyor mu?