在C ++中按字典顺序打印字符串的所有组合
在此问题中,我们给了字符串str,并且我们必须按字典顺序打印所有字符组合。
让我们举个例子来更好地理解问题-
Input: str = ‘XYZ’Output :
X
XY
XYZ
XZ
XZY
Y
YX
YXZ
YZ
YZX
Z
ZX
ZXY
ZY
ZYX
为了解决这个问题,我们将打印字符串中所有字符的组合。为此,我们需要一个映射数据结构来存储字符串的字符。对于实现,我们将需要使用回溯来跟踪所有组合。
示例
#include <bits/stdc++.h>using namespace std;
void printResult(char* result, int len);
void findstringCombination(char result[], char str[], int count[],int level, int
size, int length) ;
void printCharCombination(string str);
int main(){
string str = "ABC";
cout<<"The combination of characters of the string :\n";
printCharCombination(str);
return 0;
}
void findstringCombination(char result[], char str[], int count[],int level, int size, int length){
if (level == size)
return;
for (int i = 0; i < length; i++) {
if (count[i] == 0)
continue;
count[i]--;
result[level] = str[i];
printResult(result, level);
findstringCombination(result, str, count, level + 1, size, length);
count[i]++;
}
}
void printCharCombination(string str){
map<char, int> mp;
for (int i = 0; i < str.size(); i++) {
if (mp.find(str[i]) != mp.end())
mp[str[i]] = mp[str[i]] + 1;
else
mp[str[i]] = 1;
}
char* input = new char[mp.size()];
int* count = new int[mp.size()];
char* result = new char[str.size()];
map<char, int>::iterator it = mp.begin();
int i = 0;
for (it; it != mp.end(); it++) {
input[i] = it->first;
count[i] = it->second;
i++;
}
int length = mp.size();
int size = str.size();
findstringCombination(result, input, count, 0, size, length);
}
void printResult(char* result, int len){
for (int i = 0; i <= len; i++)
cout<<result[i];
cout<<endl;
}
输出结果
字符串的字符组合-
AAB
ABC
AC
ACB
B
BA
BAC
BC
BCA
C
CA
CAB
CB
CBA
以上是 在C ++中按字典顺序打印字符串的所有组合 的全部内容, 来源链接: utcz.com/z/330929.html