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

C++の反復法を使用して文字列のすべてのサブシーケンスを出力します


この問題では、文字列が与えられ、与えられた文字列から部分文字列を見つける必要があります。検出される部分文字列は、母音で始まり、定数文字で終わる必要があります。

文字列 文字の配列です。

この問題で生成される部分文字列は、文字列の一部の文字を削除することで生成できます。文字列の順序を変更せずに。

Input: ‘abc’
Output: ab, ac, abc

この問題を解決するために、文字列を繰り返して母音を修正し、次のシーケンスをチェックします。解決策を見つけるためのアルゴリズムを見てみましょう-

アルゴリズム

Step 1: Iterate of each character of the string, with variable i.
Step 2: If the ith character is a vowel.
Step 3: If the jth character is a consonant.
Step 4: Add to the HashSet, substring from 1st character to jth character.
Step 5: Repeat the following steps and find substrings from the string.

反復アプローチでは、すべての文字列を反復処理します。 1から2 legth(string) -1。

#include <bits/stdc++.h>
using namespace std;
string subString(string s, int binary){
   string sub = "";
   int pos;
   while(binary>0){
      pos=log2(binary&-binary)+1;
      sub=s[pos-1]+sub;
      binary= (binary & ~(1 << (pos-1)));
   }
   reverse(sub.begin(),sub.end());
   return sub;
}
void findAllSubStrings(string s){
   map<int, set<string> > sorted_subsequence;
   int len = s.size();
   int limit = pow(2, len);
   for (int i = 1; i <= limit - 1; i++) {
      string sub = subString(s, i);
      sorted_subsequence[sub.length()].insert(sub);
   }
   for (auto it : sorted_subsequence) {
      for (auto ii : it.second)
         cout<<ii<<" ";
      cout<<"\t";
   }
}
int main() {
   string s = "wxyz";
   cout<<"The substring are :\n";
   findAllSubStrings(s);
   return 0;
}

出力

サブストリングは-

です
w x y z wx wy wz xy xz yz wxy wxz wyz xyz wxyz

  1. C ++の反復アプローチを使用して、バイナリツリーのすべてのリーフノードを左から右に印刷します。

    この問題では、二分木が与えられ、二分木のすべてのリーフノードを左から右に反復アプローチで印刷する必要があります。 問題を理解するために例を見てみましょう 入力- 出力 − 1 4 7 反復アプローチを使用してこの問題を解決するために、深さ優先探索(DFS)を使用します。ツリーをトラバースするには、ルートノードから開始し、それがリーフノードであるかどうかを確認してから、ノードを出力します。それ以外の場合は、子ツリーを検索し、子サブツリーをトラバースしてすべてのリーフノードを検索します。 例 以下のコードは私たちのソリューションを実装します- #include <iost

  2. C++でDFSを使用してn-aryツリーのすべてのリーフノードを出力します

    この問題では、n-aryのエッジを含む2次元配列が与えられます。ここで、edgeはn-aryツリーのエッジを定義します。作成したa-aryツリーのすべてのリーフノードを印刷する必要があります。 n-aryツリー は最大n個の子を持つツリーです。つまり、ノードは1、2、...n個の子ノードを持つことができます。 問題を理解するための例を見てみましょう- Input: edge[][] = {{5,8}, {5,6}, {8,1}, {8,4}, {6,7}} Output: 1 4 7 説明 −エッジ配列を使用してツリーを作成しましょう− このツリーのリーフノードは1、4、7です