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

C++での2つの文字列の最大のマージ


2つの文字列「a」と「b」および文字列「merge」があると仮定します。タスクは、文字列「merge」に「a」と「b」の文字を次のように入力することです。

  • 文字列'a'が空でない場合は、文字列'a'から最初の文字を削除し、文字列'merge'にコピーします。
  • 文字列'b'が空でない場合は、文字列'b'から最初の文字を削除し、文字列'merge'にコピーします。
  • 文字列'a'および'b'が空でない場合は、文字列'a'から最初の文字を削除し、それを文字列' merge'にコピーしてから、文字列'bから最初の文字(存在する場合)を削除します。 'そしてそれを文字列'merge'にコピーします。
  • 辞書式順序で両方の文字列から文字を削除します。つまり、文字列'a'が文字列'b'より大きい場合は、文字列'a'から文字を削除してから文字列'b'を削除します。
  • 文字列「merge」を返します。

入力-1:

a = “bacaa”

b = “abcaa”

出力:

babcacaaaa

説明:

指定された文字列「a」は辞書式順序で文字列「b」よりも大きいため、最初の文字を文字列「a」、つまり「b」から抽出し、次に文字列「b」から抽出します。抽出後、文字列は「babcacaaaa」になります。

この問題を解決するためのアプローチ

この問題を解決するための再帰的アプローチは、文字列'a'と文字列'b'の各文字を抽出し、文字列'a'の文字が他の文字列より辞書式に大きいかどうかをチェックし、最後に文字列'merge'に連結することです。 。

いくつかの位置の後に各文字の部分文字列を見つけ、辞書式順序で他の文字列よりも大きい場合は「マージ」に連結します。

  • 2つの入力文字列「a」と「b」を取ります。
  • 再帰文字列関数concatenateLargest(string a、string b)は、入力として2つの文字列を受け取り、連結後の最大の文字列、つまり(string'a' + string'b')を返します。
  • 両方の文字列が空の場合は、文字列'a'+文字列'b'を返します。
  • 文字列'a'が文字列'b'以下の場合は、最初の文字を抽出し、他の文字に対して関数を再帰的に呼び出します。
  • 文字列'b'が文字列'b'以下の場合は、最初の文字を抽出し、他の文字に対して関数を再帰的に呼び出します。
  • 連結された文字列を返します。

#include <bits/stdc++.h>
using namespace std;
string concatenateLargest(string a, string b) {
   if (a.size() == 0 or b.size() == 0) {
      return (a + b);
   }
   if (a <= b)
      return b[0] + concatenateLargest(a, b.substr(1));
   else
      return a[0] + concatenateLargest(a.substr(1), b);
}
int main() {
   string a = "bacaa";
   string b = "abcaa";
   cout << concatenateLargest(a, b) << endl;
   return 0;
}

上記のコードを実行すると、次のように出力が生成されます

出力

bacabcaaaa

「bacaa」と「abcaa」の2つの文字列は、指定された問題に従ってマージすると、「bacabcaaaa」になります。


  1. C++で2つのバイナリ文字列を追加するプログラム

    2進数の文字列が2つある場合、それら2つの2進数文字列を加算して得られた結果を見つけ、その結果を2進数文字列として返す必要があります。 2進数は、0または1のいずれかで表される数値です。2つの2進数を加算する際には、2進数の加算規則があります。 0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0, carry 1 入力 str1 = {“11”}, str2 = {“1”} 出力 “100” 入力 str1 = {“110”},

  2. C++で2つの二分木をマージする

    2つの二分木があり、一方をもう一方を覆うように配置すると、2つのツリーの一部のノードがオーバーラップし、他のノードがオーバーラップするとします。それらを新しいバイナリツリーにマージする必要があります。マージルールは、2つのノードがオーバーラップしている場合、ノード値を合計して、マージされたノードの新しい値として計算するようなものです。それ以外の場合は、空でないノードが新しいツリーのノードとして使用されます。 したがって、木が- その場合、出力は-になります これを解決するには、次の手順に従います- メソッドはmergeTrees()です。これは、2つのツリーノードn1と