用 C++ 输出两个给定字符串的所有交错


本问题提供了两个字符串 str1 和 str2,我们必须从两个字符串输出所有交叉字符串。

交叉字符串由两个给定字符串创建,顺序为每个字符串的字符顺序。

我们以一个示例来理解问题 -

Input: str1 = “XY” str2= “NS”
Output: XYNS, XNYS, XNSY, NXYS, NXSY, NSXY

要解决这个问题,我们将获取字符串中的所有字符。str1 的长度 = m,str2 的长度 = n,所以我们将从这些字符串创建所有交叉字符串。

要打印所有交叉字符串,我们将修复字符串的字符,并递归调用所有字符串组合。

示例

实现我们的逻辑 -

 实时演示

#include <iostream>
#include <string.h>
using namespace std;
void printStrings (char *str1, char *str2, char *iStr, int m, int n, int i) {
   if (m == 0 && n == 0)
      cout<<iStr<<endl ;
   if (m != 0) {
      iStr[i] = str1[0];
      printStrings(str1 + 1, str2, iStr, m - 1, n, i + 1);
   }
   if (n != 0) {
      iStr[i] = str2[0];
      printStrings(str1, str2 + 1, iStr, m, n - 1, i + 1);
   }
}
void generateInterleavingString(char *str1, char *str2, int m, int n) {
   char *iStr= new char[((m + n + 1)*sizeof(char))];
   iStr[m + n] ='\0';
   printStrings(str1, str2, iStr, m, n, 0);
}
int main() {
   char str1[] = "XY";
   char str2[] = "NS";
   cout<<"All interleaving string are :\n";
   generateInterleavingString(str1, str2, strlen(str1), strlen(str2));
   return 0;
}

输出

All interleaving string is −
XYNS
XNYS
XNSY
NXYS
NXSY
NSXY

更新日期:2020 年 1 月 22 日

403 次查看

开启你的 职业生涯

完成课程即可获得认证

开始
广告