C++ 中按字典排序的幂集
在此问题中,我们给定字符串 str。我们的任务是按字典序打印此字符串元素的幂集。
幂集 - 幂集是集合的所有子集的集合。表示为 P(S),其中 s 是集合。
示例 -
S = {1, 2, 3} ; p(S) = {{}, {1}, {1, 2}, {1, 3}, {2}, {2, 3}, {3}, {1,2,3}}
在此问题中,我们将字符串视为一个集合。因此,它的字符将成为集合的元素。
让我们举一个例子来理解这个问题
输入 - str = “xyz”
输出 - x xy xyz xz y yz z
为了解决这个问题,我们必须对数组进行排序,以便获得字典序。然后我们将固定字符串中的一个元素并递归调用剩下的元素,这些元素将生成所有子字符串。然后舍弃第一个固定元素以获得下一个排列。
示例
展示我们解决方案实现的程序,
#include <bits/stdc++.h> using namespace std; void printAllSubsets(string str, int n, int index = -1, string subset = "") { if (index == n) return; cout<<subset<<"\n"; for (int i = index + 1; i < n; i++) { subset+= str[i]; printAllSubsets(str, n, i, subset); subset = subset.erase(subset.size() - 1); } return; } void GeneratePowerSet(string str) { sort(str.begin(), str.end()); printAllSubsets(str, str.size()); } int main() { string str = "xyz"; cout<<"Power Set of the string '"<<str<<"' is :\n"; GeneratePowerSet(str); return 0; }
输出
Power Set of the string 'xyz' is: x xy xyz xz y yz z
广告