สมมติว่าเรามี String 2 ตัว 'a' และ 'b' และ String 'merge' ภารกิจคือเติม String 'merge' ด้วยตัวอักษรจาก 'a' และ 'b' อย่างที่:
- ถ้า String 'a' ไม่ว่าง ให้ลบตัวอักษรแรกจาก 'a' และ Copy เข้า 'merge'
- ถ้า String 'b' ไม่ว่าง ให้ลบตัวอักษรแรกจาก 'b' และ Copy เข้า 'merge'
- ถ้า 'a' และ 'b' ไม่ว่างทั้งคู่ ให้ลบตัวอักษรแรกจาก 'a' Copy เข้า 'merge' แล้วลบตัวอักษรแรกจาก 'b' Copy เข้า 'merge'
- ลบตัวอักษรจากทั้งสอง String แบบ Lexicographically หมายถึง ถ้า String 'a' มากกว่า 'b' (Lexicographically) ให้ลบตัวอักษรจาก 'a' ก่อนแล้วค่อย 'b'
- คืนค่า String 'merge'
ตัวอย่าง Input-1:
a = "bacaa"
b = "abcaa"
Output:
babcacaaaa
คำอธิบาย:
เนื่องจาก String 'a' มากกว่า 'b' แบบ Lexicographically เราจะดึงตัวอักษรแรกจาก 'a' คือ "b" แล้วจาก 'b' หลังดึงแล้ว String จะกลายเป็น "babcacaaaa"
แนวทางแก้ปัญหา
แนวทาง Recursive คือ เราจะดึงตัวอักษรแต่ละตัวของ 'a' และ 'b' ตรวจสอบว่าตัวอักษรของ 'a' มากกว่า 'b' แบบ Lexicographically หรือไม่ และต่อท้ายเข้า 'merge'
เราจะหา Substring ของแต่ละตัวอักษรหลังจากตำแหน่งจำนวนหนึ่งและต่อเข้า 'merge' หากมากกว่าอีก String แบบ Lexicographically
รับ Input String 'a' และ 'b'
Recursive Function concatenateLargest(string a, string b) รับ 2 String คืนค่า String ใหญ่ที่สุดหลังต่อกัน (string 'a' + string 'b')
ถ้า 'a > b' ให้ Split String 'a' ตำแหน่ง '0' และคืนค่าจาก 'a'
ถ้า 'a < b' ให้ Split String 'b' ตำแหน่ง '0' และคืนค่าจาก 'b'
คืนค่า Concatenated String
ตัวอย่าง
def concatenateLargest(a, b):
ans = ""
while a and b:
if a > b:
ans += a[0]
a = a[1:]
else:
ans += b[0]
b = b[1:]
ans += a
ans += b
return ans
a = "bacaa"
b = "abcaa"
print(concatenateLargest(a, b))
การรันโค้ดข้างต้นจะได้ผลลัพธ์:
ผลลัพธ์
bacabcaaaa
String 2 ตัว "bacaa" และ "abcaa" จะกลายเป็น "bacabcaaaa" หลัง Merge ตามโจทย์