이 문제에서는 문자열이 주어지며 이를 부분 문자열로 나누고 괄호를 묶어 출력해야 합니다.
문제를 더 잘 이해하기 위해 몇 가지 예를 들어보겠습니다.
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)