是否可以从给定字符串形成长度不限的所有可能字符串?
在本节中,我们将了解如何生成长度不限的所有可能字符串,它将采用各种字符组合来生成字符串。例如,如果字符串为 ABC,则它会生成 − {A,B,C,AB,BA,BC,CB,CA,AC,ABC,ACB,BAC,BCA,CAB,CBA}
我们看一个例子来帮助理解。
算法
printAllString(str)
Begin n := length of the string str count is 2^n – 1 for each number 0 to count, do sub_str := empty string for j in range 0 to n, do if jth bit of the counter is set, then concatenate jth character of str with sub_str end if done repeat: print sub_string until next permutation of sub_string is not completed done End
示例
#include <iostream> #include <algorithm> #include <cmath> using namespace std; void printAllString(string str) { int n = str.size(); unsigned int count = pow(2, n); for (int counter = 1; counter <count; counter++) { //generate 2^n - 1 strings string subs = ""; for (int j = 0; j < n; j++) { if (counter & (1<<j)) //when the jth bit is set, then add jth character subs.push_back(str[j]); } do{ cout << subs << endl; } while (next_permutation(subs.begin(), subs.end())); } }
输出
A B AB BA C AC CA BC CB ABC ACB BAC BCA CAB CBA D AD DA BD DB ABD ADB BAD BDA DAB DBA CD DC ACD ADC CAD CDA DAC DCA BCD BDC CBD CDB DBC DCB ABCD ABDC ACBD ACDB ADBC ADCB BACD BADC BCAD BCDA BDAC BDCA CABD CADB CBAD CBDA CDAB CDBA DABC DACB DBAC DBCA DCAB DCBA
广告