สมมติว่าเรามีสตริง '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' น้อยกว่าหรือเท่ากับสตริง 'b' ให้แยกอักขระตัวแรกและเรียกใช้ฟังก์ชันซ้ำสำหรับอักขระอื่นๆ
- หากสตริง 'b' น้อยกว่าหรือเท่ากับสตริง 'b' ให้แยกอักขระตัวแรกและเรียกใช้ฟังก์ชันซ้ำสำหรับอักขระอื่นๆ
- ส่งคืนสตริงที่ต่อกัน
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; string concatenateLargest(string a, string b) { if (a.size() == 0 or b.size() == 0) { return (a + b); } if (a <= b) return b[0] + concatenateLargest(a, b.substr(1)); else return a[0] + concatenateLargest(a.substr(1), b); } int main() { string a = "bacaa"; string b = "abcaa"; cout << concatenateLargest(a, b) << endl; return 0; }
การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น
ผลลัพธ์
bacabcaaaa
สองสตริง “bacaa” และ “abcaa” จะกลายเป็น “bacabcaaaa” หลังจากรวมกันตามปัญหาที่กำหนด