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

พิมพ์ทุกวิธีในการทำลายสตริงในรูปแบบวงเล็บใน C++


ในปัญหานี้ เราได้รับสตริงและเราต้องแยกสตริงออกเป็นสตริงย่อยและพิมพ์วงเล็บที่ล้อมรอบ

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากันดีกว่า

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)