Viết chương trình hoặc hàm, cho hai chuỗi ASCII Avà B, sẽ tạo ra các chuỗi A'và B'trong đó các chuỗi con chung được đảo ngược ở vị trí của chúng. Quá trình tìm kiếm A'như sau:
A'ban đầu trống rỗng.- Nếu ký tự đầu tiên của
Alà trongB, tìm tiền tố dài nhất trongAđó là một chuỗi con củaB. Xóa tiền tố này khỏiAvà thêm đảo ngược của nó vàoA'. - Nếu không, loại bỏ ký tự đầu tiên này
Avà thêm nó vàoA'. - Lặp lại các bước 2-3 cho đến khi
Atrống.
Việc tìm kiếm B'được thực hiện tương tự.
Thí dụ
Hãy xem xét các chuỗi A = "abc bab"và B = "abdabc". Đối với A', đây là những gì xảy ra:
A = "abc bab": Ký tự đầu tiên"a"nằm trong B và tiền tố dài nhất của A được tìm thấy trong B là"abc". Chúng tôi xóa tiền tố này khỏi A và thêm đảo ngược của nó"cba"vào A '.A = " bab": Ký tự đầu tiên" "không nằm trong B, vì vậy chúng tôi xóa ký tự này khỏi A và thêm nó vào A '.A = "bab": Ký tự đầu tiên"b"nằm trong B và tiền tố dài nhất của A được tìm thấy trong B là"b". Chúng tôi xóa tiền tố này khỏi A và thêm đảo ngược của nó (vẫn còn"b") vào A '.A = "ab": Ký tự đầu tiên"a"nằm trong B và tiền tố dài nhất của A được tìm thấy trong B là"ab". Chúng tôi xóa tiền tố này khỏi A và thêm đảo ngược của nó"ba"vào A '.A = "": A trống, vì vậy chúng tôi dừng lại.
Như vậy chúng ta có được A' = "cba" + " " + "b" + "ba" = "cba bba". Đối với B ', quy trình tương tự:
B = "abdabc" -> "a" in A, remove prefix "ab"
B = "dabc" -> "d" not in A, remove "d"
B = "abc" -> "a" in A, remove prefix "abc"
Như vậy chúng ta có được B' = "ba" + "d" + "cba" = "badcba".
Cuối cùng, chúng tôi trả lại hai chuỗi, tức là
(A', B') = ("cba bba", "badcba")
Các trường hợp thử nghiệm
"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"
Mã ngắn nhất trong byte thắng.
"cba bba", "badcba"bao gồm dấu ngoặc kép và dấu phẩy?