สมมติว่ามีสตริง s และ t เราต้องสร้างสตริง merge ดังนี้: כל עוד s หรือ t ไม่ว่าง ให้เลือกหนึ่งในสองทางเลือก:
- ถ้า
sไม่ว่าง ให้นำตัวอักษรแรกของsต่อท้ายmergeและลบออกจากs - ถ้า
tไม่ว่าง ให้นำตัวอักษรแรกของtต่อท้ายmergeและลบออกจากt
หา merge ที่มีลำดับเล็กซิโครกราฟิก (lexicographically) มากที่สุด
ตัวอย่าง: s = "zxyxx", t = "yzxxx" ผลลัพธ์คือ zyzxyxxxxx
วิธีแก้ปัญหา
ans := สตริงว่างidx1 := 0, idx2 := 0- วนลูป
while idx1 < len(s) and idx2 < len(t):- ถ้า
s[idx1] > t[idx2]หรือ (s[idx1] == t[idx2]และs[idx1:] >= t[idx2:]):ans += s[idx1]idx1 += 1
- มิฉะนั้น:
ans += t[idx2]idx2 += 1
- ถ้า
- คืนค่า
ans + s[idx1:] + t[idx2:]
ตัวอย่างโค้ด
def solve(s, t):
ans = ""
idx1 = idx2 = 0
while idx1 < len(s) and idx2 < len(t):
if s[idx1] > t[idx2] or (s[idx1] == t[idx2] and s[idx1:] >= t[idx2:]):
ans += s[idx1]
idx1 += 1
elif s[idx1] < t[idx2] or (s[idx1] == t[idx2] and s[idx1:] <= t[idx2:]):
ans += t[idx2]
idx2 += 1
return ans + s[idx1:] + t[idx2:]
s = "zxyxx"
t = "yzxxx"
print(solve(s, t))
อินพุต
"zxyxx", "yzxxx"
เอาต์พุต
zyzxyxxxxx