ในปัญหานี้ เราได้รับสตริงและเราต้องแยกสตริงออกเป็นสตริงย่อยและพิมพ์วงเล็บที่ล้อมรอบ
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากันดีกว่า
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)