C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

指定された2つの文字列のすべてのインターリーブをC++で出力します


この問題では、2つの文字列str1とstr2が与えられ、両方の文字列からすべてのインターリーブ文字列を出力する必要があります。

インターリーブ文字列 各文字列の文字の順序がわかるように、2つの指定された文字列を使用して作成されます。

問題を理解するために例を見てみましょう-

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

  1. C++のバイナリツリーで指定された2つのレベル間のすべてのノードを出力します

    この問題では、バイナリツリーとツリー内の2つのレベル(上位と下位)が与えられ、ツリーの上位レベルと下位レベルの間のすべてのノードを印刷する必要があります。 二分木 は、各ノードに最大2つのノード(1つまたは2つ/なし)を持つ特別なツリーです。 問題を理解するために例を見てみましょう- アッパー−1 低い− 3 出力 − 6 3 9 7 4 8 10 この問題を解決するには、ツリーのノードを特定のレベルで印刷する必要があります。 上部からのループを使用して再帰関数を呼び出します。 下へ ツリーのレベル。 このアルゴリズムは単純ですが、n 2の次数がより複雑です。 。

  2. 特定のソースから宛先までのすべてのパスをC++で出力します

    この問題では、有向グラフが与えられ、グラフのソースから宛先までのすべてのパスを印刷する必要があります。 有向グラフ は、頂点aからbに向けられたエッジを持つグラフです。 問題を理解するために例を見てみましょう ソース=K宛先=P 出力: K -> T -> Y -> A -> P K -> T -> Y -> P K -> A -> P ここで、KからPへのパスを見つけました。パスをトラバースし、KからPに向かうすべてのパスを出力しました。 この問題を解決するために、深さ優先探索を使用してグラフをトラバースします。