ในปัญหานี้ เราได้รับสตริงและเราต้องแยกสตริงออกเป็นสตริงย่อยและพิมพ์วงเล็บที่ล้อมรอบ
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากันดีกว่า
Input : wxyz Output : (w) (x) (y) (z) (w) (x) (yz) (w) (xy) (z) (w) (xyz) (wx) (y) (z) (wx) (yz) (wxy) (z) (wxyz)
คำอธิบาย − เราจะแยกสตริงออกเป็นสตริงย่อยที่เป็นไปได้ทั้งหมด และใส่วงเล็บย่อยแต่ละสตริงย่อย
เมื่อเราเข้าใจปัญหาแล้ว มาสร้างวิธีแก้ปัญหากัน
เราจะใช้การเรียกซ้ำเพื่อแก้ปัญหา เราจะใช้พารามิเตอร์สองตัว ตัวหนึ่งจะเป็นอักขระตัวถัดไปของสตริง และอีกตัวคือสตริงเอาต์พุต สตริงย่อยที่ยังไม่ได้ประมวลผลจะได้รับการประมวลผลอย่างช้าๆ ในการวนซ้ำแต่ละครั้ง และส่วนย่อยก็ถูกสร้างขึ้น
ตัวอย่าง
โปรแกรมแก้ปัญหา -
#include <iostream> using namespace std; void substring(string str, int index, string out){ if (index == str.length()) cout << out << endl; for (int i = index; i < str.length(); i++) substring(str, i + 1, out + "(" + str.substr(index, i+1-index) + ")" ); } int main(){ string str = "wxyz"; cout<<”The substring are :”<<endl; substring(str, 0, ""); return 0; }
ผลลัพธ์
The substring are : (w)(x)(y)(z) (w)(x)(yz) (w)(xy)(z) (w)(xyz) (wx)(y)(z) (wx)(yz) (wxy)(z) (wxyz)