เขียนโปรแกรมหรือฟังก์ชั่นที่ได้รับสตริง ASCII สองสายAและBจะสร้างสตริงA'และB'ตำแหน่งที่สตริงย่อยทั่วไปกลับด้าน กระบวนการในการค้นหาA'มีดังนี้:
A'ตอนแรกว่างเปล่า- ถ้าตัวอักษรตัวแรกของ
Aที่อยู่ในBการค้นหาคำนำหน้ายาวที่สุดของซึ่งเป็นย่อยของABลบคำนำหน้านี้จากและเพิ่มการโอนกลับไปยังAA' - มิฉะนั้นลบตัวอักษรตัวแรกนี้จากและเพิ่มเข้าไป
AA' - ทำซ้ำขั้นตอนที่ 2-3 จนกระทั่ง
Aว่างเปล่า
การค้นหาB'จะทำในทำนองเดียวกัน
ตัวอย่าง
ลองพิจารณาสตริงและA = "abc bab" B = "abdabc"สำหรับA'นี่คือสิ่งที่เกิดขึ้น:
A = "abc bab": ตัวอักษรตัวแรก"a"ที่อยู่ในบีและคำนำหน้ายาวที่สุดของที่พบใน B"abc"คือ เราลบคำนำหน้านี้ออกจาก A และเพิ่มการกลับรายการ"cba"เป็น A 'A = " bab": อักขระตัวแรก" "ไม่ได้อยู่ใน B ดังนั้นเราจึงลบตัวละครนี้ออกจาก A และเพิ่มลงใน A 'A = "bab": ตัวอักษรตัวแรก"b"ที่อยู่ในบีและคำนำหน้ายาวที่สุดของที่พบใน B"b"คือ เรานำคำนำหน้านี้ออกจาก A และเพิ่มการกลับรายการ (ซึ่งยังคงอยู่"b") ใน A 'A = "ab": ตัวอักษรตัวแรก"a"ที่อยู่ในบีและคำนำหน้ายาวที่สุดของที่พบใน B"ab"คือ เราลบคำนำหน้านี้ออกจาก A และเพิ่มการกลับรายการ"ba"เป็น A 'A = "": A ว่างเปล่าดังนั้นเราหยุด
A' = "cba" + " " + "b" + "ba" = "cba bba"ดังนั้นเราจึงได้รับ สำหรับ B 'กระบวนการจะคล้ายกัน:
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' = "ba" + "d" + "cba" = "badcba"ดังนั้นเราจึงได้รับ
ในที่สุดเรากลับสองสตริงคือ
(A', B') = ("cba bba", "badcba")
กรณีทดสอบ
"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"
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
"cba bba", "badcba"คำพูดและเครื่องหมายจุลภาค?