在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;

}

输出结果

字符串的字符组合-

A

AB

ABC

AC

ACB

B

BA

BAC

BC

BCA

C

CA

CAB

CB

CBA

以上是 在C ++中按字典顺序打印字符串的所有组合 的全部内容, 来源链接: utcz.com/z/330929.html

回到顶部