이 문제에서는 회문 문자열이 제공됩니다. 그리고 이 문자열의 모든 파티션을 인쇄해야 합니다. 이 문제에서는 문자열을 잘라서 가능한 모든 회문 분할을 찾습니다.
문제를 이해하기 위해 예를 들어 보겠습니다. -
입력 - 문자열 ='아바바'
출력 − 아바바, 아바바, 아바바아….
이 문제에 대한 해결책은 부분 문자열이 회문인지 여부를 확인하는 것입니다. 하위 문자열인 경우 하위 문자열을 인쇄합니다.
예시
아래 프로그램은 솔루션을 설명합니다 -
#include<bits/stdc++.h> using namespace std; bool isPalindrome(string str, int low, int high){ while (low < high) { if (str[low] != str[high]) return false; low++; high--; } return true; } void palindromePartition(vector<vector<string> >&allPart, vector<string> &currPart, int start, int n, string str){ if (start >= n) { allPart.push_back(currPart); return; } for (int i=start; i<n; i++){ if (isPalindrome(str, start, i)) { currPart.push_back(str.substr(start, i-start+1)); palindromePartition(allPart, currPart, i+1, n, str); currPart.pop_back(); } } } void generatePalindromePartitions(string str){ int n = str.length(); vector<vector<string> > partitions; vector<string> currPart; palindromePartition(partitions, currPart, 0, n, str); for (int i=0; i< partitions.size(); i++ ) { for (int j=0; j<partitions[i].size(); j++) cout<<partitions[i][j]<<" "; cout<<endl; } } int main() { string str = "abaaba"; cout<<"Palindromic partitions are :\n"; generatePalindromePartitions(str); return 0; }
출력
Palindromic partitions are : a b a a b a a b a aba a b aa b a a baab a aba a b a aba aba abaaba