สมมติว่าเรามีสตริง 'a' และ 'b' สองสตริง และสตริง 'merge' งานคือการเติมสตริง 'ผสาน' ด้วยอักขระจาก 'a' และ 'b' ในลักษณะที่
- หากสตริง 'a' ไม่ว่างเปล่า ให้ลบอักขระตัวแรกออกจากสตริง 'a' และคัดลอกลงในสตริง 'merge'
- หากสตริง 'b' ไม่ว่างเปล่า ให้ลบอักขระตัวแรกออกจากสตริง 'b' และคัดลอกลงในสตริง 'merge'
- หากสตริง 'a' และ 'b' ไม่ว่าง ให้ลบอักขระตัวแรกออกจากสตริง 'a' และคัดลอกลงในสตริง 'merge' แล้วลบอักขระตัวแรก (ถ้ามี) ออกจากสตริง 'b ' และคัดลอกลงในสตริง 'ผสาน'
- ลบอักขระออกจากสตริงทั้งสองแบบตามลำดับศัพท์ ซึ่งหมายความว่า หากสตริง 'a' มากกว่าสตริง 'b' ให้ลบอักขระออกจากสตริง 'a' ตามด้วยสตริง 'b'
- ส่งคืนสตริง 'ผสาน'
ตัวอย่าง
อินพุต-1:
a = “bacaa”
b = “abcaa”
ผลลัพธ์:
babcacaaaa
คำอธิบาย:
เนื่องจากสตริงที่กำหนด 'a' มีความหมายมากกว่าสตริง 'b' เราจะแยกอักขระตัวแรกออกจากสตริง 'a' นั่นคือ "b" และจากสตริง 'b' หลังจากแตกสตริงแล้วจะเป็น “babcacaaaa”
แนวทางแก้ไขปัญหานี้
วิธีการแบบเรียกซ้ำในการแก้ปัญหานี้คือเราจะแยกอักขระแต่ละตัวของสตริง 'a' และสตริง 'b' และจะตรวจสอบว่าอักขระของสตริง 'a' มีคำศัพท์มากกว่าสตริงอื่นหรือไม่ และสุดท้ายเชื่อมกับสตริง 'ผสาน' .
เราจะค้นหาสตริงย่อยของอักขระแต่ละตัวหลังจากจำนวนตำแหน่งและเชื่อมเข้าด้วยกันเป็น 'การผสาน' หากอักขระนั้นมีค่ามากกว่าสตริงอื่น
- รับสองสตริงอินพุต 'a' และ 'b'
- ฟังก์ชันสตริงแบบเรียกซ้ำ concatenateLargest(string a, string b) รับสองสตริงเป็นอินพุตและส่งกลับสตริงที่ใหญ่ที่สุดหลังจากการต่อกัน นั่นคือ (สตริง 'a' + สตริง 'b')
- ถ้า 'a> b' ให้แยกสตริง 'a' ด้วยตำแหน่ง '0' และส่งคืนผลลัพธ์จากสตริง 'a'
- ถ้า 'a
- ส่งคืนสตริงที่ต่อกัน
ตัวอย่าง
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
สองสตริง “bacaa” และ “abcaa” จะกลายเป็น “bacabcaaaa” หลังจากรวมกันตามปัญหาที่กำหนด