Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การผสานสองสตริงที่ใหญ่ที่สุดใน C++


สมมติว่าเรามีสตริง '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” หลังจากรวมกันตามปัญหาที่กำหนด