สมมติว่าเรามีสองสตริง s และ t เราต้องการสร้างสตริงที่เรียกว่า merge ด้วยวิธีต่อไปนี้ ในขณะที่ s หรือ t ว่างเปล่า ให้เลือกตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้ -
-
หาก s ไม่ว่าง ให้ผนวกอักขระตัวแรกใน s เพื่อรวมและลบออกจาก s
-
หาก t ไม่ว่าง ให้ผนวกอักขระตัวแรกใน t เพื่อรวมและลบออกจาก t
สุดท้าย เราต้องหาการรวมคำศัพท์ที่ใหญ่ที่สุดที่เราสร้างขึ้นได้
ดังนั้น หากอินพุตเป็น s ="zxyxx" t ="yzxxx" เอาต์พุตจะเป็น "zyzxyxxxxx"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
a :=0, b :=0
-
ผสาน :=สตริงว่าง
-
W1 :=ขนาดของ s
-
W2 :=ขนาดของเสื้อ
-
ในขณะที่ a
-
ถ้าสตริงย่อยของ s จากดัชนี a ถึงปลาย> สตริงย่อยของ t จากดัชนี b ถึงจุดสิ้นสุด ดังนั้น
-
ผสาน :=ผสานเชื่อม s[a]
-
a :=a + 1
-
-
มิฉะนั้น
-
ผสาน :=ผสานเชื่อม t[b]
-
b :=b + 1
-
-
-
ส่งคืนการรวม concatenate (สตริงย่อยของ s จากดัชนี a ไปยังจุดสิ้นสุด) เชื่อมติดกัน (สตริงย่อยของ t จากดัชนี b ไปยังจุดสิ้นสุด)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(s, t): a = b = 0 merge = "" W1 = len(s) W2 = len(t) while a < W1 and b < W2: if s[a:] > t[b:]: merge += s[a] a += 1 else: merge += t[b] b += 1 return merge + s[a:] + t[b:] s = "zxyxx" t = "yzxxx" print(solve(s, t))
อินพุต
"zxyxx", "yzxxx"
ผลลัพธ์
zyzxyxxxxx