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

C++での文字列からの特定のサブシーケンスの削除の最大数


与えられたタスクは、文字列から与えられたサブシーケンスの削除の最大数を見つけることです。文字列sが指定されているため、文字列から削除できるサブシーケンス「abc」の最大数を見つける必要があります。

例を使用して、私たちがしなければならないことを理解しましょう:

入力

s = ‘dnabcxy’

出力

1

説明 −指定された文字列(「dnabcxy」)には「abc」のサブシーケンスが1つしか見つからないため、出力は1になります。

入力

s = ‘zcabcxabc’

出力

2 (‘zcabcxabc’)

以下のプログラムで使用されるアプローチは次のとおりです

  • Max()関数で、変数i、a、ab、abcを値=0でint型で初期化します。

  • i =0からIまでループします

  • ループ内で(s [i] ==‘a’)かどうかを確認し、そうである場合は、aの値をインクリメントします。

  • それ以外の場合は、(s [i] ==‘b’)かどうかを確認し、trueの場合は、(a> 0)かどうかをもう一度確認します。両方の条件が当てはまる場合は、aの値を1減らし、abの値を増やします。

  • 最後に、(s [i] ==‘c’)かどうかを確認し、trueの場合は、(ab> 0)かどうかをもう一度確認します。両方の条件が当てはまる場合は、abの値を1減らし、abcの値を増やします。

  • abcを返す

#include <bits/stdc++.h>
using namespace std;
int Max(string s){
   int i=0, a=0, ab=0, abc=0;
   for (i = 0; i < s.length(); i++){
      if (s[i] == 'a'){
         a++;
      }
      else if (s[i] == 'b'){
         if (a > 0){
            a--;
            ab++;
         }
      }
      else if (s[i] == 'c'){
         if (ab > 0){
            ab--;
            abc++;
         }
      }
   }
   return abc;
}
//main function
int main(){
   string s = "zcabcxabc";
   cout << Max(s);
   return 0;
}

出力

2

  1. 与えられた回数だけ文字列を連結するC++プログラム?

    ここでは、文字列をn回連結する方法を説明します。 nの値はユーザーによって指定されます。この問題は非常に単純です。 C ++では、連結に+演算子を使用できます。アイデアを得るためにコードを確認してください。 アルゴリズム concatStrNTimes(str、n) begin    res := empty string    for i in range 1 to n, do       res := concatenate res and res    done    retu

  2. 与えられた文字列の順列の数を見つけるためのC++プログラム

    文字列の文字をさまざまな順序で並べることができます。ここでは、特定の文字列から形成できる順列の数をカウントする方法を説明します。 1つの文字列が「abc」の場合はわかります。 3つの文字があります。 3つにアレンジできます! =6つの異なる方法。したがって、n文字の文字列は、nに配置できます。違う方法。しかし、aabのように同じ文字が複数回存在する場合、6つの順列はありません。 aba aab baa baa aab aba ここで、(1,6)、(2、5)、(3,4)は同じです。したがって、ここでは順列の数は3です。これは基本的に(n!)/(複数回発生しているす